c++ primer plus 笔记
类的继承
面向对象编程
目的:
提供可以重用的代码;
类的组合
数据表示
类方法
类的继承方式
public
private
protected
链接: https://blog.csdn.net/chaipp0607/article/details/72190119?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task.
注意
在类外只能用共有成员访问protected和private部分的成员;
对于,外部世界来说,保护成员的行为与私有成员的行为相似;
对于派生类来说,保护成员的行为与公有成员相似;
最好对数据成员采用私有访问控制,不要使用保护访问控制,同时,通过基类方法使派生类能够访问基类数据;
对于成员函数来说,保护访问控制很有用,它让派生类能够访问公众不能使用的内部函数。
类继承的作用
扩展类
修改类
class derived:public base
{
.......
}
类
基类
派生类
派生类的构造函数
- 首先创建基类对象
- 派生类构造函数应该通过成员初始化列表将基类信息传递给基类构造函数(若不调用基类构造函数将使用默认的基类构造函数)
- 派生类构造函数应该初始化派生类新增的数据成员
(构造函数和复制构造函数的区别)
注意
创建派生类对象时,程序首先调用基类构造函数,然后再调用派生类构造函数;
基类构造函数负责初始化继承的数据成员;
派生类构造函数主要用于初始化新增的数据成员;
派生类的构造函数总是调用一个基类的构造函数;
可以使用初始化列表语法指明要使用的基类构造函数,否则将使用默认的基类构造函数;
派生类对象过期时,程序将首先调用派生类析构函数,然后再调用基类构造函数;
派生类构造函数使用初始化列表机制将值传递给基类的构造函数
derived::derived(type1 x,type2 Y):base(x,y) //初始化列表
{
....
}
//derived 派生类
//base基类
派生类和基类的关系
基类指针可以在不进行显示类型转换的情况下指向派生类对象;
基类引用可以在不进行显示类型转换的情况下引用派生类对象;
基类指针和基类引用只能调用基类方法,不能调用派生类方法;
不可以将基类对象和地址赋给派生类引用和指针;
多态共有继承
同一个方法在派生类和基类中是不同的,即方法的行为取决于调用该方法的对象;
在派生类中重新定义基类的方法
使用虚方法
如果在派生类中重新定义基类的方法,通常将基类方法声明为虚的(有函数体);
这样,程序将根据**对象类型而不是引用类型来选择方法**;
通常为基类声明一个虚析构函数。
虚函数
关键字:virtual
关键字只用于类声明的方法原型中,而不用于方法定义中
抽象基类(Abstract base class,ABC)
纯虚函数(可以提供未实现的函数,也可以有函数体)
末尾声明处为=0
eg:virtual double Area() const =0;
用于两个类拥有一定的共性
eg:
Circle和Ellipse
共同点:中心坐标和Move()方法(两个类相同)
Area()方法(两个类不同)