文章目录
1. 三大特性
C++面向对象的三大特性为:封装、继承、多态
C++认为万事万物都皆为对象,对象上有其属性和行为
例如:
人可以作为对象,属性有姓名、年龄、身高、体重…,行为有走、跑、跳、吃饭、唱歌…
车也可以作为对象,属性有轮胎、方向盘、车灯…,行为有载人、放音乐、放空调…
具有相同性质的对象,我们可以抽象称为类,人属于人类,车属于车类
理解: 每个对象抽象成一个类,一个类的所有对象都有相同的性质(属性)。就像有相同性质(属性和行为)的元素(对象)组合成一个集合(类)。
2.封装——C++面对对象三大特性之一
2.1 封装的意义
- 将属性和行为作为一个整体,表现生活中的事物
- 将属性和行为加以权限控制
2.1.1 封装意义一
在设计类的时候,属性和行为写在一起,表现事物
语法: class 类名{ 访问权限: 属性 / 行为 };
案例1: 设计一个圆类,求圆的周长:
1)首先要明确求圆周长的公式,2 * Π * 半径,那么半径就可以做为圆的属性;
2)由于Π是一个常量,取3.14,并且不可以改变,所以可以直接定义一个全局常量,加入const修饰;
3)在这个案例当中不涉及圆心、周长,所以不添加这些属性。(也可以设计一个类通过圆周长求圆半径、直径)
设计类:
1)类在C++中是“class”,语法:class 类名{ 访问权限: 属性 / 行为 };
2)在这个案例中的public是公共权限,表示类内或类外,都可以访问这个类的属性和行为,后续再讲访问权限
3)属性用一个变量来体现,行为通常用一个函数来体现
4)有圆类之后可以在main函数中通过圆类来创建具体的圆,也就是创建对象
5)创建具体对象的语法:类 对象名;
6)对象的属性和行为通过“.”来访问
1)总结
1.设计类
class 类名
{
public:——公共权限,表示类内或类外,都可以访问这个类的属性和行为,
访问权限
属性——通常是变量
行为——通常是函数
};
2.实例化:通过一个类创建具体的对象
类名 对象名;
3.对象的属性和行为的获取,通过“.”访问
4.类中的属性和行为统称为成员;属性,也叫成员属性 成员变量;行为,也叫成员函数 成员方法
2)作业
设计一个学生类,属性有姓名和学号,可以给姓名和学号赋值,可以显示学生的姓名和学号
明确:属性是姓名和学号,行为是给姓名和学号赋值并显示。我把赋值和显示分开了,其实也可以一起输出
老师写的
黑马老师-设计学生类
2.1.2 封装意义二:
类在设计时,可以把属性和行为放在不同的权限下,加以控制
三种访问权限
- public 公共权限 成员 类内可以访问 类外可以访问
- protected 保护权限 成员 类内可以访问 类外不可以访问(继承时 父类的保护权限的内容,子类也可以访问)
- private 私有权限 成员 类内可以访问 类外不可以访问(继承时 父类的保护权限的内容,子类不可以访问)
在类外不可以访问私有权限和保护权限的内容,类内三种权限都可以访问
黑马老师-访问权限
2.2 class和struct的区别
在C++中 struct和class唯一的区别就在于 默认的访问权限不同
区别:struct 默认权限为公共;class 默认权限为私有
clas和struct
2.3 成员属性私有化
优点1: 将所有成员属性设置为私有,可以自己控制读写权限
优点2: 对于写权限,我们可以检测数据的有效性
私有权限实现可写:通过一个公共权限下的设有形参的函数,并在类外传入参数实现可写操作;
实现可读:通过一个公共权限下的有返回值的函数,并在函数内返回需要的私有权限内容,实现可写操作
成员属性私有化
2.4 案例1-长方体类
1)要求
- 求出长方体的面积和体积
- 分别用全局函数和成员函数判断两个长方体是否相等。
2)实现
- 写一个长方体类,给长、宽、高赋值,并且类内的函数计算其面积、体积;
- 写一个全局函数,给长、宽、高赋值,计算其面积、体积;
- 两个输入相同的边长,都打印面积和体积,验证是否相等。
类的设计——自己写的
全局函数
验证
类的设计——老师写的
和老师写的主要区别在于:
1.用类创建了两个长方体;只创建了一个类
2.用全局函数判断是否相等使用bool值来判断真假;全局函数直接计算另一个面积和体积,直接输出判断
3.没有使用成员函数判断
把老师写的,跟着敲了一遍,在判断的地方做了调整。还有很大的进步空间!
全局判断函数
验证
符合预期
黑马老师-案例1-立方体类
2.5 案例2-点和圆的关系
1.思路
2.设计点类
3.设计圆类
4.全局函数的判断
5.实例化
6.总结:
这个案例主要值得学习的地方在于
1.再次熟悉类的创建和实例化的过程
2.通过点类和圆类的设计,要明白一个类可以做为另一个类的成员,比如点类可以做为圆类的成员
3.再次熟悉分文件编写和使用场景。自己写的时候把两个类写在一起,老师视频中提到这对之后大项目的开发不好,代码量会很大,所以老师用了分文编写
4.在头文件中写类成员函数的声明;在源文件中写类成员函数的实现,这里要加上局域
7.分文见编写
点类-头文件-成员函数的声明-不需要函数的实现
点类-源文件-成员函数的实现,加局域
圆类-头文件
这里需要包含点类的头文件
圆类-源文件
最后在main函数中包含两个头文件即可
黑马老师-案例2-点和圆关系