C++虚函数表、虚继承,类的大小

本文详细解释了C++中虚函数表的大小如何由虚函数数量决定,以及父类和子类虚函数表的区别。讨论了虚函数对对象大小的影响,涉及虚继承、虚函数继承和构造/析构函数中虚函数调用的性质。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++虚函数表所占的大小?

在C++中,虚函数表指针的大小和虚函数表的大小都与具体实现相关。在一般情况下,虚函数表指针的大小为4(32位)或者8(64位)个字节,虚函数表的大小取决于类中虚函数的个数。
以下是一个C++虚函数表大小的具体例子:

#include <iostream>
using namespace std;

class Base {
public:
virtual void func1() { cout << "Base::func1()" << endl; }
virtual void func2() { cout << "Base::func2()" << endl; }
};

class Derived : public Base {
public:
virtual void func3() { cout << "Derived::func3()" << endl; }
};

int main() {
Derived d;
d.func1(); // calls Base::func1()
d.func2(); // calls Base::func2()
d.func3(); // calls Derived::func3()
return 0;
}

在这个例子中,Derived类继承了Base类,并且重写了其中两个虚函数。由于Derived类中有三个虚函数,因此它也有自己的虚函数表,大小为三个指针(指向虚函数的地址)。在运行时,当调用d.func

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值