C++ 继承知识点

多继承

//多继承

class C1{
public:
	string name;
};

class C2 {
public:
	string name;
};
class C3 :public C1,public C2 {

};

int main() {


	C3 a;
	a.name = "233"; //不明确 报错
	a.C1::name = "233"; //  指定具体的name 修复

}

菱形继承

//菱形继承
class Person
{
public:
	string _name; // 姓名
};
class Student : public Person //public virtual Person 能避免混淆 
{
protected:
	int _num; //学号
};
class Teacher : public  Person //加入 virtual 才能避免混淆
{
protected:
	int _id; // 职工编号
};
class Assistant : public Student, public Teacher
{
protected:
	string _majorCourse; // 主修课程
};


int main()
{

	Assistant a;
	a._name = "peter";  //成员混淆,使用virtual 虚继承解决
	a.Student::_name = "1";//指定具体在哪里也可以
	a.Teacher::_name = "2";
}

vbptr(虚基类指针) 其中v是virtual 虚 b是base 基类 prt指针
(vbptr指向虚基类表)
vbtable(虚基类表 ) 保存了当前的虚指针相对于虚基类的首地址的偏移量

总结:之所以 产生 vbptr和vbtable 目的 保证 不管多少个继承 虚基类的数据只有一份

继承类型

当一个类派生自基类,该基类可以被继承为 public、protected 或 private 几种类型。继承类型是通过上面讲解的访问修饰符 access-specifier 来指定的。

我们几乎不使用 protected 或 private 继承,通常使用 public 继承。当使用不同类型的继承时,遵循以下几个规则:

公有继承(public):当一个类派生自公有基类时,基类的公有成员也是派生类的公有成员,基类的保护成员也是派生类的保护成员,基类的私有成员不能直接被派生类访问,但是可以通过调用基类的公有和保护成员来访问。
保护继承(protected): 当一个类派生自保护基类时,基类的公有和保护成员将成为派生类的保护成员。
私有继承(private):当一个类派生自私有基类时,基类的公有和保护成员将成为派生类的私有成员。

继承中的构造函数与析构函数调用顺序

在vs2019下:

构造函数从父类开始 ,根据继承从左到右的顺序一次开始执行构造函数
析构函数从子类开始,根据继承从右到左的顺序一次开始执行析构函数

参考

https://www.runoob.com/cplusplus/cpp-inheritance.html
https://www.colorgg.com 深蓝旭

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值