本篇要学习的内容和知识结构概览
继承和派生的概念
派生
通过特殊化已有的类来建立新类的过程, 叫做”类的派生”, 原有的类叫做”基类”, 新建立的类叫做”派生类”. 从类的成员角度看, 派生类自动地将基类的所有成员作为自己的成员, 这叫做”继承”. 基类和派生类也可以叫做”父类”和”子类”, 也可以叫做”一般类”和”特殊类”.
继承
类的继承是指派生类继承基类的数据成员和成员函数. 继承用来表示类属关系, 不能将继承理解为构成关系
继承派生的作用
(1)增加新的成员(数据成员和成员函数)
(2)重新定义已有的成员函数
(3)改变基类成员的访问权限
单一继承
一般形式:class 派生类名: 访问控制 基类名 { private: 成员声明列表 protected: 成员声明列表 public: 成员声明列表}
"冒号"表示新类是哪个基类的派生类
"访问控制"指继承方式. 三个方式: public, protected, private
派生类的构造函数和析构函数
// 基类
class Point {
int x;
int y;
public:
Point(int a, int b) {
x = a;
y = b;
cout << "init Point" << endl;
}
void showPoint() {
cout << "x = " << x << ", y = " << y << endl;
}
~Point() {
cout << "delete Point" << endl;
}
};
// 派生类
class Rect: public Point {
int w;
int h;
public:
// 调用基类的构造函数对基类成员进行初始化
Rect(int a, int b, int c, int d):Point(a, b) {
w = c;
h = d;
cout << "init Rect" << endl;
}
void showRect() {
cout << "w = " << w << ", h = " << h << endl;
}
~Rect() {
cout << "delete Rect" << endl;
}
};
int main() {
Rect r(3, 4, 5, 6);
r.showPoint();
r.showRect();
/** 输出结果
init Point // 当定义一个派生类的对象时, 首先调用基类的构造函数, 完成对基类成员的初始化
init Rect // 然后执行派生类的构造函数, 完成对派生类成员的初始化
x = 3, y = 4 // 调用基类成员函数showPoint();
w = 5, h = 6 // 调用派生类成员函数showRect();
delete Rect // 构造函数的执行顺序和构造函数的执行顺序相反, 首先调用派生类的析构函数
delete Point // 其次调用基类的析构函数
*/
}
类的保护成员
如果希望Rect中的showRect()函数可以一次显示x, y , w, h. 我们直接修改showRect()函数是不行的。