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分)
...全文
128 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
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

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧