文章目录
- 一. 类和对象
- 1.1 封装
- 1.1.1 封装的意义
- 1.1.2 struct和class区别
- 1.1.3 成员属性设置为私有
- 1.2 对象的初始化和清理
- 1.2.1 构造函数和析构函数
- 1.2.2 构造函数的分类及调用
- 1.2.3 拷贝构造函数调用时机
- 1.2.4 构造函数调用规则
- 1.2.5 深拷贝与浅拷贝
- 1.2.6 初始化列表
- 1.2.7 类对象作为类成员
- 1.2.8 静态成员
- 1.3 C++对象模型和this指针
- 1.3.1 成员变量和成员函数分开存储
- 1.3.2 this指针概念
- 1.3.3 空指针访问成员函数
- 1.3.4 const修饰成员函数
- 1.4 友元
- 1.4.1 全局函数做友元
- 1.4.2 类做友元
- 1.4.3 成员函数做友元
- 1.5 运算符重载
- 1.5.1 加号运算符重载
- 1.5.2 左移运算符重载
- 1.5.3 递增运算符重载
- 1.5.4 赋值运算符重载
- 1.5.5 关系运算符重载
- 1.5.6 函数调用运算符重载
- 1.6 继承
- 1.6.1 继承的基本语法
- 1.6.2 继承方式
- 1.6.3 继承中的对象模型
- 1.6.4 继承中构造和析构顺序
- 1.6.5 继承同名成员处理方式
- 1.6.6 继承同名静态成员处理方式
- 1.6.7 多继承语法
- 1.6.8 菱形继承
- 1.7 多态
- 1.7.1 多态的基本概念
- 1.7.2 多态案例一-计算器类
- 1.7.3 纯虚函数和抽象类
- 1.7.4 多态案例二-制作饮品
- 1.7.5 虚析构和纯虚析构
- 1.7.6 多态案例三-电脑组装
一. 类和对象
C++面向对象的三大特性为:封装、继承、多态
(图片来源网络,侵删)C++认为万事万物都皆为对象,对象上有其属性和行为
例如:
(图片来源网络,侵删) 人可以作为对象,属性有姓名、年龄、身高、体重…,行为有走、跑、跳、吃饭、唱歌…
车也可以作为对象,属性有轮胎、方向盘、车灯…,行为有载人、放音乐、放空调…
具有相同性质的对象,我们可以抽象称为类,人属于人类,车属于车类
1.1 封装
1.1.1 封装的意义
封装是C++面向对象三大特性之一,封装的意义:
- 将属性和行为作为一个整体,表现生活中的事物
- 将属性和行为加以权限控制
封装意义一:
在设计类的时候,属性和行为写在一起,表现事物
语法: class 类名{ 访问权限: 属性 / 行为 };
示例1: 设计一个圆类,求圆的周长
示例代码:
//圆周率 const double PI = 3.14; //1、封装的意义 //将属性和行为作为一个整体,用来表现生活中的事物 //封装一个圆类,求圆的周长 //class代表设计一个类,后面跟着的是类名 class Circle { public: //访问权限 公共的权限 //属性 int m_r;//半径 //行为 //获取到圆的周长 double calculateZC() { //2 * pi * r //获取圆的周长 return 2 * PI * m_r; } }; int main() { //通过圆类,创建圆的对象 // c1就是一个具体的圆 Circle c1; c1.m_r = 10; //给圆对象的半径 进行赋值操作 //2 * pi * 10 = = 62.8 cout public: void setName(string name) { m_name = name; } void setID(int id) { m_id = id; } void showStudent() { cout Student stu; stu.setName("德玛西亚"); stu.setID(250); stu.showStudent(); return 0; } //姓名 公共权限 public: string m_Name; //汽车 保护权限 protected: string m_Car; //银行卡密码 私有权限 private: int m_Password; public: void func() { m_Name = "张三"; m_Car = "拖拉机"; m_Password = 123456; } }; int main() { Person p; p.m_Name = "李四"; //p.m_Car = "奔驰"; //保护权限类外访问不到 //p.m_Password = 123; //私有权限类外访问不到 return 0; } int m_A; //默认是私有权限 }; struct C2 { int m_A; //默认是公共权限 }; int main() { C1 c1; c1.m_A = 10; //错误,访问权限是私有 C2 c2; c2.m_A = 10; //正确,访问权限是公共 system("pause"); return 0; } public: //姓名设置可读可写 void setName(string name) { m_Name = name; } string getName() { return m_Name; } //获取年龄 int getAge() { return m_Age; } //设置年龄 void setAge(int age) { if (age