引言
本文为C++编程学习者引入继承的概念,通过示例代码的形式展现,希望能帮大家降低入门门槛。内容为个人学习经验总结,本章内容较多,如有疏漏,感谢指正。
一、继承的概念
类的继承:一个新的类从已有类那里获得已有特性的现象。
类的派生:在已有类(父类)上建立一个新的类的现象。
父类:基类,已有的类
子类:派生类,新的类
兄弟类:同一个父类的多个子类。
最远派生类:最远的子类。
本质:将父类的内容拷贝了一份到子类空间。
注意:派生类继承了 基类所有的数据成员 和 成员函数(构造、析构除外)
派生一个子类的语法:
class 子类名 : 权限限定符 父类名1, 权限限定符 父类名2, …
{
类体
};
继承时的权限
隐式向上转换
子类指针可以转换成基类指针(多态涉及)
继承与组合
继承 – is-a 关系:大学生是学生 、虎宝猫是猫
组合 – has-a关系:汽车有发动机、变速器、轮子
二、公有继承 public_inherit
公有继承时,派生类对象只能访问基类 公有成员,派生类内部只能访问基类 公有、保护成员。
示例代码
#include<iostream>usingnamespacestd;classBase{public:floatmoney=12;protected:floatgetMoney(){cout<<__func__<<endl;returnmoney;}private:inteyes=2;};// 从 base 类派生出子类 Subclass,或者是 定义类Subclass 继承于 Base类classSubclass:publicBase{//公有继承public:voidtest(){cout<<money<<endl;cout<<getMoney()<<endl;// cout << eyes << endl; //错误,私有的成员不能被访问}};intmain(){Subclass sub;//定义派生类对象cout<<sub.money<<endl;// cout << sub.getMoney() << endl; //错误,getMoney是受保护的// cout << eyes << endl; //错误,eyes为私有的}三、保护继承 protected_inherit
保护继承时,派生类对象不能访问基类 任何成员,派生类内部只能访问基类 公有、保护成员。
保护继承时,基类 public权限变成 protected权限。
示例代码
#include<iostream>usingnamespacestd;classBase{public:floatmoney=12;protected:floatgetMoney(){cout<<__func__<<endl;returnmoney;}private:inteyes=2;};classSubclass:protectedBase{//保护继承public:voidtest(){cout<<money<<endl;cout<<getMoney()<<endl;// cout << eyes << endl; //错误,私有的成员不能被访问}};intmain(){Subclass sub;// cout << sub.money << endl;// cout << sub.getMoney() << endl; //错误,getMoney是受保护的// cout << eyes << endl; //错误,eyes为私有的}四、私有继承 private_inherit
私有继承时,派生类对象不能访问基类 任何成员,派生类内部只能访问基类 公有、保护成员。
私有继承时,基类 public、protected 权限变成 private权限。
示例代码
#include<iostream>usingnamespacestd;classBase{public:floatmoney=12;protected:floatgetMoney(){cout<<__func__<<endl;returnmoney;}intgetEyes(){