理解虚基类和虚继承
- 抽象类:有纯虚函数的类。而虚基类是被虚继承的类。
class B: virtual public A
- 如果是普通继承,B对象内存开头存储基类A的成员,后接B的独有成员。
- 虚继承后B对象内存开头存储一个vbptr(virtual base ptr),指向一个vbtable,vbtable存储两个偏移量,第一个偏移量是vbptr在B内存的偏移量,即0;第二个偏移量是基类A的成员在B中的偏移量。
- 再次深入理解虚函数表
class A
{
};
class B
{
virtual void func(){}
};
class C : virtual public B
{
};
int main()
{
cout << sizeof(A) <<sizeof(B) <<sizeof(C);
}
#include <iostream>
using namespace std;
class A
{
public:
virtual void func() { cout << "call A::func()" << endl; }
private:
int ma;
};
class B : virtual public A
{
public:
virtual void func() { cout << "call B::func()" << endl; }
private:
int mb;
};
int main()
{
A* p = new B();
p->func();
delete p;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)