1.继承基本概念
c++最重要的特征是代码重用,通过继承机制可以利用已有的数据类型来定义新的数据类型,新的类不仅拥有旧类的成员,还拥有新定义的成员。
一个B类继承于A类,或称从类A派生类B。这样的话,类A成为基类(父类)或者说A类是B类的超级类,简称超类, 类B成为派生类(子类)。
派生类中的成员,包含两大部分:
1. 一类是从基类继承过来的,一类是自己增加的成员。
2. 从基类继承过过来的表现其共性,而新增的成员体现了其个性
2.继承的格式:
Class 派生类名 : 继承方式 基类名{
//派生类新增的数据成员和成员函数
}
3.三种继承方式:
public : 公有继承
private : 私有继承
protected : 保护继承
从继承源上分:
单继承:指每个派生类只直接继承了一个基类的特征
多继承:指多个基类派生出一个派生类的继承关系,多继承的派生类直接继承了不止一个基类的特征
4.子类对父类的访问控制(子类对父类的属性,函数的访问权限)
派生类继承基类,派生类拥有基类中全部成员变量和成员方法(除了构造和析构之外的成员方法),但是在派生类中,继承的成员并不一定能直接访问,不同的继承方式会导致不同的访问权限。
派生类的访问权限规则如下:
![579a3aa71af63df6f1ef83535b8b663d.png](https://img-blog.csdnimg.cn/img_convert/579a3aa71af63df6f1ef83535b8b663d.png)
接下来我会用代码来一一解析:
1.共有(public)派生:
//基类class A{public:int mA;protected:int mB;private:int mC;}; //1. 公有(public)继承class B : public A{public:void PrintB(){cout << mA << endl; //可访问基类public属性cout << mB << endl; //可访问基类protected属性//cout << mC << endl; //不可访问基类private属性}};//多重继承class SubB : public B{void PrintSubB(){cout << mA << endl; //可访问基类public属性cout << mB << endl; //可访问基类protected属性//cout << mC << endl; //不可访问基类private属性}};
上面都是在子类定义中对父类的属性的权限访问,其中对于public公有继承来说,父类中的public,protected的属性都能在子类中进行访问,但是private就不能访问,切记!
在类定义外,子类对象只能访问父类的public属性,请看代码示例:
void test01(){ B b;//创建一个B对象,默认调用没有参数的构造方法cout << b.mA << endl; //可访问基类public属性//cout << b.mB << endl; //不可访问基类protected属性//cout << b.mC << endl; //不可访问基类private属性}!!!因为新手,不懂用头条的编辑,请谅解。2.私有(private)派生//2. 私有(private)继承class C : private A{public:void PrintC(){cout << mA << endl; //可访问基类public属性cout << mB << endl; //可访问基类protected属性//cout << mC << endl; //不可访问基类private属性}};//3. 保护(protected)继承class D : protected A{public:void PrintD(){cout << mA << endl; //可访问基类public属性cout << mB << endl; //可访问基类protected属性//cout << mC << endl; //不可访问基类private属性}};!请勿离开,后面更精彩