- 封装的意义
- class 和 stuct 的区别
- 成员属性设置为私有
- 构造函数和析构函数
- 构造函数
- 构造函数初始化列表
- 浅拷贝和深拷贝
- 析构函数
- 静态成员
C++面向对象的三大特征:封装、继承、多态
C++认为万事万物皆为对象,对象上有其属性和行为。
封装的意义封装是C++面向对象三大特性之一;
封装的意义:
- 将属性和行为作为一个整体,表现生活中的事物
语法:class 类名 { 权限控制: 属性 / 行为 }
- 将属性和行为加以权限控制
访问权限有三种:
- public 公共权限
类内可以访问,类外可以访问 - protected 保护权限
类内可以访问,类外不可以访问,儿子可以访问父亲的保护内容 - private 私有权限
类内可以访问,类外不可以访问,儿子不可以访问父亲的保护内容
在c++中struct和class唯一的区别就在于默认的访问权限不同
区别:
- struct: 默认权限为公共
- class: 默认权限为私有
优点:
- 将所有成员属性设置为私有,可以自己控制读写权限
- 对于写权限,我们可以检测权限的有效性
示例:
#include构造函数和析构函数using namespace std; #include class Student{ private: string m_name; public: void setName(string name) { m_name = name; } string getName() { return m_name; } }; int main(){ Student s; s.setName("lxf"); cout << s.getName() << endl; system("pause"); return 0; }
构造函数如果我们不提供构造和析构,编译器会提供默认的空实现构造和析构
主要作用在于创建对象时为对象的成员属性赋值,构造函数由编译器自动调用,无须手动调用
构造函数语法:类名(){ }
- 构造函数,没有返回值,也不写void
- 函数名称与类名相同
- 构造函数可以有参数,因此可以发生重载
- 程序会自动调用,无须手动调用,并且只会调用一次
例如:
// 初始化列表
Persono(int a, int b, int c) : m_a(a),m_b(b),m_c(c){
}
浅拷贝和深拷贝
浅拷贝:简单的赋值拷贝操作
浅拷贝可能会带来一些问题,比如: 堆区的内存重复释放
深拷贝:在堆区重新申请空间,进行拷贝操作
浅拷贝带来的"堆区内内存重复释放"的问题,可以使用深拷贝来解决;
手动写深拷贝,重新在堆区申请内存
主要作用在于对象销毁前自动调用,执行一些清理操作
析构函数语法:~类名(){ }
- 析构函数,没有返回值,也不写void
- 函数名称与类名相同,在类名前面加上符号~
- 构造函数不可以有参数,因此不可以发生重载
- 程序会自动调用,无须手动调用,并且只会调用一次
静态成员就是在变量和成员前面加上 static 关键字
静态成员分为:
- 静态成员变量
– 所有对象共享同一份数据
– 在编译阶段分配内存
– 类内声明,类外初始化 - 静态成员函数
– 所有对象共享同一个函数
– 静态成员函数只能访问静态成员变量



