C++学习笔记:关键字virtual 虚继承

C++学习笔记:关键字virtual 虚继承

(依旧是程设2的笔记)
在这里插入图片描述
普通继承与虚继承,只有在派生类重复继承某一基类时,才有区别。virtual可以使派生类在重复继承一个基类时,只产生唯一的一份基类副本。如上图,当B,C的继承代码为:
class B:virtual public A{};
class C: virtual public A{};
此时D只会继承一份A,而不会通过B,C重复继承了。此时A即为虚基类。

那么虚继承的本质是什么呢?
给出了以下代码:

#include<iostream>
using namespace std;
class A{};
class B:public A{};
class C:public A{};
class D:public B,public C{}; 
int main(){
    cout<<"sizeof A is "<<sizeof(A)<<endl;
    cout<<"sizeof B is "<<sizeof(B)<<endl;
    cout<<"sizeof C is "<<sizeof(C)<<endl;
    cout<<"sizeof D is "<<sizeof(D)<<endl;
} 

输出为:

sizeof A is 1
sizeof B is 1
sizeof C is 1
sizeof D is 2

再看以下代码:

#include<iostream>
using namespace std;
class A{};
class B:virtual public A{};
class C:virtual public A{};
class D:public B,public C{}; 
int main(){
    cout<<"sizeof A is "<<sizeof(A)<<endl;
    cout<<"sizeof B is "<<sizeof(B)<<endl;
    cout<<"sizeof C is "<<sizeof(C)<<endl;
    cout<<"sizeof D is "<<sizeof(D)<<endl;
} 

输出为:

sizeof A is 1
sizeof B is 8
sizeof C is 8
sizeof D is 16

我们注意到,在普通继承中,B,C的大小与A相同。而虚继承中,B,C的大小为8字节,这说明虚基类的派生类包含的其实是指向虚基类的指针。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值