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分)
...全文
69 点赞 收藏 7
写回复
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
回复 点赞
发动态
发帖子
C语言
创建于2007-09-28

3.2w+

社区成员

24.0w+

社区内容

C语言相关问题讨论
社区公告
暂无公告