2个有点难度的问题:(1)抽象基类有VTABLE吗?(2)...

TrueZq 2003-03-19 01:47:26
(1)
任何包含一个或多个纯虚函数的基类称做抽象基类

抽象基类有VTABLE(Virtual Table 虚拟表)吗?
请说明理由或举例证明之(60分)

(2)
class A {
virtual void f();
};

void main()
{
cout<<"size="<<sizeof(A)<<endl;//输出4
}

class A {
virtual void f()=0;
};

void main()
{
cout<<"size="<<sizeof(A)<<endl;//输出也是4
}
是否证明抽象基类也有个VPTR呢?如果有VPTR,它既然不能被初始化(因为不能定义抽象基类对象),又有什么用?(40分)
...全文
98 7 打赏 收藏 举报
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
leasun 2003-03-19
编译器会为之生成一个vtable
  • 打赏
  • 举报
回复
JoshuaLi 2003-03-19
学习
  • 打赏
  • 举报
回复
yndfcd 2003-03-19
有没有VTable指针我不知道,但我知道一点。一个空类的大小不为0。这不能说明它有一个Vtable的指针.
在上面的例子中如果定义
class D: public A
{
int member1;
void f(){}
}
则sizeof(D)仍为4.
  • 打赏
  • 举报
回复
merlinran 2003-03-19
致楼主:
ABC有没有vptr对你来说真的很重要吗?

记住:语言是工具。
学C++之初就学这些是没有用的。

到后来自然就会明白有与没有了。可以说有,也可以说没有。
  • 打赏
  • 举报
回复
TrueZq 2003-03-19
问题一:
抽象类在包含有“非抽象的虚函数”时确实有VTABLE。
抽象类如果包含的全都是纯虚函数,也应该有VTABLE吧(我猜的),不知对否

问题二:
我想 抽象类是应该有VPTR的
只是没有看到任何书籍提到,也无法证明

还有谁能讲透彻点?
  • 打赏
  • 举报
回复
shornmao 2003-03-19
VTABLE是实现定义的,C++标准未制定。
  • 打赏
  • 举报
回复
北极猩猩 2003-03-19
抽象类是该有VPTR的
因为,C++中的抽象类中不一定只含有抽象函数也可以由非抽象的虚函数,这些函数当然需要使用VPTR
  • 打赏
  • 举报
回复
相关推荐
发帖
C语言
加入

6.6w+

社区成员

C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
申请成为版主
帖子事件
创建了帖子
2003-03-19 01:47
社区公告
暂无公告