网站首页 > 基础教程 正文
C++是一个多编程范式的编程语言,支持以函数为基本组件的面向过程的编程范式,也支持以类为基本构件的面向对象的编程范式。由此,其支持的函数类型也可以区分为与类相关的构造、析构、成员(静态、非静态)函数,以及全局函数(内部链接或外部链接),同时也支持友元函数。(与Java要求所有代码写在类内,所有数据和代码要隶属于不同的类不同,C++可以定义全局函数和全局变量(外部变量))
直接看实例和注释:
/* 构造、析构、成员(静态、非静态)函数、友元、全局函数
non_static member function: 有隐藏的this指针(指向对象数据成员的起始地址)
static member function: 没有this指针(所以不能访问non_static的成员数据),有类作用域
friend function: 有权限可以额外访问声明其为友元的类的私有成员
statci global function: internal linkage,otherwise, external linkage
constructor: initializing data member;
destructor: free or close resource
*/
#include <stdio.h>
class Demo
{
public:
Demo(double a,double b):ci(a)// 构造函数
{
pv = b;
de = new double(99.99);
}
friend double ff(Demo &d); // 友元函数声明
static double sf(double r) // static member function,没有隐含的this指针
{
return r*r*PI;
//return r*r*pv; // static member function can't access non-static member
}
double mf(double r) // non_static member function,隐含this指针
{
return 2*r*pv+PI-PI;
}
~Demo(){delete de;} // 析构函数,如果有资源占用需要释放,如free()、fclose()
Demo(const Demo& d):ci(d.ci) // 复制构造函数
{
pv = d.pv;
de = new double(99.98);
}
Demo& operator=(const Demo& d) // 赋值运算符重载
{
if(this != &d)
{
pv = d.pv;
delete de;
de = new double(99.89);
}
return *this;
}
double getci() const
{
return ci;
}
Demo operator++(int)
{
Demo d = *this;
pv = pv + 1;
return d;
}
static double PI;// 静态数据成员在类外初始化,表明其仅一份,与对象无关,但可为对象使用
private:
double pv;
const double ci; // const成员需使用初始化列表初始化
double *de; // point to heap memory block
};
double Demo::PI=3.1415926; // static成员类外初始化
double ff(Demo &d) // 友元函数定义
{
Demo e(5,6);
return d.pv+e.pv;
}
static double gf(Demo d) // 全局函数定义,static表示internal linkage
//static double gf(Demo &d) // 对于有指针成员的类,如果没有复制构造函数,则不能是值传递
{
static double sv = d.mf(3);
sv += 2*2*d.PI;// sv += d.pv // error,static function can't access non-static member
return sv;
}
const int g_var = 89; // 默认为internal linkage
int main()
{
Demo d(4,5);
double sum = g_var;
sum += d.sf(3);
sum += Demo::sf(3);
sum += d.mf(3);
sum += ff(d);
sum += gf(d);
printf("%lf\n",sum);
Demo e = d;
e++;
printf("%lf\n",e.getci());
getchar();
return 0;
}
类是对数据的再次分类或数据类型的自定义,是一种不同于面向过程的代码组织方式和编程思想,是对数据和函数的封装,提供了访问控制的安全机制,也提供了类名的命名空间和作用域。同时,也为非静态成员函数提供了隐含的this指针。当然,类的继承性和多态代码重用和扩展的一种重要手段。
-End-
- 上一篇: C++开发:数据类型的声明,初始化,赋值
- 下一篇: C++11 统一的初始化 c++11初始化列表
猜你喜欢
- 2024-10-10 C++系列1-1:初探C++ c=2μf
- 2024-10-10 浅谈C++11(第9篇 可变参数模板) c++可变参数模板类
- 2024-10-10 数组的初始化方式有哪几种? 数组的初始化是什么意思
- 2024-10-10 c++对于内建类型的默认初始化 创建内部类的对象
- 2024-10-10 C++类构造函数,如何初始化对象?linux C++第27讲
- 2024-10-10 【C++编程语言】之 类和对象——对象的初始和消除
- 2024-10-10 C++基础语法梳理:引用、封装、继承和多态
- 2024-10-10 C++核心准则?:按照成员声明的顺序定义和初始化成员变量
- 2024-10-10 C++核心准则C.47:按照成员变量声明的次序定义和初始化数据成员
- 2024-10-10 C/C++语言编程系列002——不同情况下数组的初始化方法
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)