一.类
类定义的变量就是对象
1.构造函数
(只有)创建对象的时候系统自动调用的函数(初始化对象)
(1)构造函数名与类名相同
(2)构造函数没有返回值
(3)构造函数可以重载
注意:关于构造函数
(1)如果构造函数被调用了,则一定有一个新对象被创建了
(2)如果有一个新对象被创建,则一定有一个构造函数被调用了
如果类中一个构造函数都没有(注意是一个都没有),系统会自动添加一个无参构造函数,给函数什么都不做。
对构造函数的赋值方式:
(1)使用括号进行赋值
Test t1(10,20);
(2)等号法赋值
Test t2 = Test(3,4);
或者:
Test t4 = 10; // 等价于 Test t4 = Test(10);
该方式只能调用单个参数的构造函数
2.析构函数
当类被释放的时候,系统会调用对象的析构函数
(1)析构函数函数名: ~ 类名
(2)析构函数没有返回值
(3)析构函数没有参数(不能重载==>析构函数只能有一个)
如果类中没有析构函数,系统会自动添加一个析构函数。
构造函数和析构函数的调用顺序:先构造的对象后析构
3.拷贝构造
(1)书写形式
类型 (const 类名 &变量名 )
Test(const Test &obj)// 拷贝构造函数 赋值构造函数
(2)调用方式
①函数参数是对象的时候,实参到形参的传递会调用拷贝构造 ==>建议使用引用
②对象作为返回值的时候,也会调用拷贝构造函数 ==>不同编译器对函数的返回值处理方式可能不同
注意:
浅拷贝 :当类中没有拷贝构造的时候,系统会自动添加一个拷贝构造函数,进行“值” 的复制
深拷贝:复制的时候连同堆上的空间一起复制 ===>自己写
当成员变量存在指针的时候,要进行深拷贝
4.对象初始化列表
在构造函数后面加 : 初始化成员 各个成员之间用逗号隔开
这种方式可以对 const 常量进行赋值
Test(int a, int b) :m_a(a) ,m_b(b)
(1)对象初始化列表的执行要优先于 构造函数
(2)对象初始化顺序与对象在初始化列表中所在的位置无关,和在类中的变量顺序有关
5.new 和 delete
new :创建会自动调用构造函数
delete :释放对象的时候会自动调用析构函数
6.类中的static 用法
(1)类中的静态成员变量,该属性不属于不属于某个成员,是类的属性,是所有成员所共有的
(2)静态变量必须要在类的外部进行初始化
int Test::m_sa = 10;
(3)静态成员(变量,函数)使用方式:
①通过变量使用
Test t;
cout << t.m_sa << endl;
Test::m_sa = 20;
cout << t.m_sa << endl;
②通过类名使用
Test::show();
(4)静态成员函数:只能使用静态的成员变量