C++第07课 继承 (一)
1.基本概念
继承: 父类 子类 ,子类没产生新的东西
派生:基类 派生类
继承A 产生B ,A B
2.继承的实质
父类的属性在子类中也存在一份,构造函数不能被继承
3.继承的权限问题
| | public | protected | private |
| ------------- | ------------- | ------------- | -------- |
| public继承 | public属性 | protected属性 | 不可访问 |
| protected继承 | protected属性 | protected属性 | 不可访问 |
| private继承 | private属性 | private属性 | 不可访问 |
综上: 假设public属性是最低 ,private属性是最高的,那么可以发现问题,继承方式只会增强父类的属性在子类当中的权限强度,任何继承方式的父类的私有属性子类都不可以直接访问。
class parent { public: int a; protected: int b; private: int c; }; class son :private parent{ public: void print() { this->a = 0; //公有属性可以访问 this->b = 1; //保护属性可以访问 //this->c=2; 私有属性不可访问 } }; int main() { son s; //s.a = 1; //只能访问公有属性 return 0; }
4.继承的构造函数写法
+ 子类的构造函数必须要采用**初始化参数列表**的写法
+ 子类构造函数必须调用父类构造函数初始化继承下来的属性,也就是父类属性只能通过父类的构造函数初始化
+ 构造子类对象时候,必定先调用父类的构造函数
class parent { public: parent() { cout << "父类默认构造" << endl; } parent(int a, int b, int c) :a(a), b(b), c(c) {} int a; protected: int b; private: int c; }; class son :public parent{ public: //下述为省略写法,显式写法:son():parent(){} son(){ cout << "子类默认构造" << endl; } son(int a, int b, int c) :parent(a, b, c) {} }; int main() { son s; //输出:父类默认构造 // 子类默认构造 son ss(1, 2, 3); return 0; }