首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >虚拟函数和vtable是如何实现的?

虚拟函数和vtable是如何实现的?
EN

Stack Overflow用户
提问于 2008-09-19 03:29:45
回答 12查看 63K关注 0票数 125

我们都知道C++中的虚拟函数是什么,但是它们是如何在深层次上实现的呢?

vtable可以在运行时修改甚至直接访问吗?

vtable是适用于所有类,还是只适用于那些至少有一个虚函数的类?

抽象类是否只对至少一个条目的函数指针有NULL?

只有一个虚函数会减慢整个类的运行速度吗?还是只调用虚拟的函数?如果虚拟函数实际上被重写了,速度是否会受到影响,或者只要它是虚拟的,这就没有影响吗?

EN

Stack Overflow用户

发布于 2008-09-19 14:41:32

您可以在C++中重新创建虚函数的功能,使用函数指针作为类的成员,使用静态函数作为实现,或者使用指向成员函数和成员函数的指针来实现。这两种方法之间只有象征性的优点。事实上,虚函数调用本身只是一种符号上的便利。事实上,继承只是一种符号上的便利。它们都可以在不使用语言特性进行继承的情况下实现。:)

下面是未经测试的垃圾代码,可能是错误代码,但希望能演示这个想法。

例如:

代码语言:javascript
运行
复制
class Foo
{
protected:
 void(*)(Foo*) MyFunc;
public:
 Foo() { MyFunc = 0; }
 void ReplciatedVirtualFunctionCall()
 {
  MyFunc(*this);
 }
...
};

class Bar : public Foo
{
private:
 static void impl1(Foo* f)
 {
  ...
 }
public:
 Bar() { MyFunc = impl1; }
...
};

class Baz : public Foo
{
private:
 static void impl2(Foo* f)
 {
  ...
 }
public:
 Baz() { MyFunc = impl2; }
...
};
票数 2
EN
查看全部 12 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/99297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档