也是很久都没有更新笔记了,今天来一更
友元
可以允许其他类或函数访问它的非公有成员,方法是令其他类或函数成为它的友元
friend 函数声明语句;
友元声明只能出现在类定义的内部
友元不是类的成员
一般来说,最好在类定义开始或结束之前的位置集中定义友元
输入输出重载只能作为友元函数
友元的声明仅仅指定了访问的权限
当我们希望类的用户能够调用某个友元函数,那么我们必须在友元声明外再专门对函数进行一次声明
类的内存
1.一个空类:1个字节
2.内存对齐
3.含有虚函数的类:加四个字节
类成员的赋值:
1.直接初始化,所有数据成员是公有的,且在没有声明任何构造函数的条件下
2.公有的成员赋值函数
3.构造函数初始化
(1)没有返回值(2)可以重载 (3)实例化对象时自动调用
4.成员初始化列表
封装的优点:
(1)确保用户的代码不会无意间破坏封装对象的状态
(2)被封装的类的具体实现细节可以随时改变,而无须调整用户级别的代码
成员函数和普通函数的区别
(1)定义不同,成员函数要加类的作用域
(2)调用不同,成员函数必须使用对象调用
this指针
无须用户定义,是一个指针常量
**1.在任何一个类成员函数的运行过程中,指针this总指向当前调用对象
2.this来表示当前调用对象
3.return this来返回当前调用者对象的指针
3.return this返回当前调用者
特点:
1.this是类的指针,指向类的对象
2.this是在类的对象被创建后,其成员函数(包括构造函数)被调用时,this就同时被说明和创建
拷贝构造函数
是一种特殊的构造函数
类名(const <类名>&<引用名>)
调用的情况:()显示调用 =隐式调用
(1)当用类的一个对象去初始化另外一个对象时
(2)如果函数的形参是类的对象,调用函数时或者进行实参和形参结合
(3)如果函数的返回值是类的对象,函数调用完成返回时
系统默认的拷贝构造函数是浅拷贝(位拷贝)
当类中的数据成员有指针,且指向堆区的内存时,要重新写拷贝构造函数
this->p=ca.p;//浅拷贝
this->p= new int (*ca.p);//深拷贝
析构函数
(1)用来在对象的生存期结束做善后工作
(2)函数名一律为 ~<类名>
(3)析构函数没有函数返回值
(4)析构函数无参数
(5)一个类只能有一个析构函数,也可以缺省
(6)在对象生存期结束时,包括用delete函数释放动态对象时,系统自动调用析构函数
(7)若某个类定义中没有给出显示的析构函数,则系统会自动给出一个缺省的析构函数
(8)当类中的数据成员有指针时,我们也要重写析构函数