一、封装
1. 通过类的封装,实现对外提供接口,屏蔽数据,对内开发数据,保证了代码的独立性(内聚性),提高了代码的维护性。
2. C封装 VS C++封装
i.通过访问权限,实现对外屏蔽数据,提供接口访问,对内开放数据,保证代码独立性
ii.提供更加简单的访问接口(编码器默认处理:this)
iii.防止内存泄漏:构造函数和析构函数
iv.良好可扩充性、可读性;可以自定义运算符功能
C++的封装本质:
将数据和行为绑定在一起,通过对象来完成操作。
重要
封装的作用?如何实现封装
对私有属性添加 set/get 方法:
二、类与对象
1. 类的声明(类是一种用户自定义类型)
声明形式:
class 类名称{ public: 公有成员(外部接口) private: 私有成员 protected: 保护成员};
2. 构造函数
为什么需要构造函数?
构造函数的定义及特点
构造函数种类
1.默认构造函数(无参构造函数)
2.带参构造函数
构造函数初始化列表:
class Test{public: // 使用初始化列表 Test(string n, int a, int i, int &s) : name(n), age(a), id(i), score(s) { cout << "初始化完成: " << endl; }private: string name; int age; int &score; const int id;};
3.拷贝构造函数
浅拷贝 VS 深拷贝
1.左值、右值、左值引用、右值引用
1.移动构造函数
使用注意事项:
1.移动后源对象必须有效且可析构,指针成员需置空,防止析构时重复释放资源
2.合成的移动操作问题:定义了拷贝构造、赋值或析构,编译器不会合成移动操作
3.移动构造和移动赋值运算符必须标记为 noexcept
1.类型转换构造函数
1.委托构造函数
3. 析构函数
定义:
C++类可定义一个特殊成员函数用于清理对象,称为析构函数。
语法:
作用:
C++类型转换运算符
a)类似于C语言的强制转换,保证代码的安全性和正确性
b)可用于:相关类型转换(如整型、实型);子类转父类;void*指针与其他类型指针之间的转换
c)不可用于:指针之间类型的转换
a)去除指针和引用的const属性
b)使用该运算符转换意味着代码设计存在缺陷
dynamic_cast(expr):
运行时类型识别和检查,用于父类子类之间的转换
a)编译的过程中进行类型转换
b)reinterpret重新解释:处理无关类型的转换
c)特点:不安全,既不在编译期也不在运行期进行检查,安全性完全由程序员决定
构造函数和析构函数的特点