随笔-15  评论-18  文章-9  trackbacks-0

       之前对虚函数也就是知道有所谓的虚函数表,以及虚函数的用法。但是对于一个类的sizeof是否包含虚函数呢,这些也并不了解。由于最近在弄内存分配,想到虚函数与sizeof,不知道sizeof是否包含了续表 所以今天查了下,看了下这里,讲的很清晰。我也写了断代码测试了一下:

 1 class BaseA{
 2 private:
 3     int x;
 4     int y;
 5 public:
 6         virtual void who()
 7     {
 8         cout<<"i am BaseA"<<endl;
 9     }
10 
11 };
12 
13 class BaseB
14 {
15 public:
16     virtual void who()
17     {
18         cout<<"i am Base B"<<endl;
19     }
20 private:
21     int x;
22     int y;
23 };
24 
25 class  DeriveA : public BaseA
26 {
27 public:
28     virtual void who()
29     {
30         cout<<"i am DerivaA"<<endl;
31     }
32     virtual void ownFun()
33     {
34 
35     }
36 };
37 
38 class  DerivAB :public BaseA,public BaseB
39 {
40 public:
41     virtual void ownFun();
42     virtual void who()
43     {
44         cout<<"i am DerivaAB"<<endl;
45     }
46 };
47 
48 int main()
49 {
50     
51     cout<<"sizeof BaseA: "<<sizeof(BaseA)<<endl;
52     cout<<"sizeof BaseB: "<<sizeof(BaseB)<<endl;
53     cout<<"sizeof DerivA: "<<sizeof(DeriveA)<<endl;
54     cout<<"sizeof DerivAB: "<<sizeof(DerivAB)<<endl;
55 }
输出的结果也是预想中的
sizeof BaseA: 12
sizeof BaseB: 12
sizeof DerivA: 12
sizeof DerivAB: 24
请按任意键继续. . .
BaseA与BaseB中x,y占8 加上虚表就是12了。
而DerivAB多继承AB,所以有BaseA 与BaseB的x,y,数据 以及两个虚表的指针所以是24了。这样看来一个类有多少个虚表也是要看是否有多个继承以及基类里是否也有虚表。sizeof居然包含了虚表的指针,那想必用placement new对于包含虚函数的类也是有用的吧。经过测试,是可以的。c++还有太多的东西不清楚起内部是如何操作的呀。继续一步学习

 

posted on 2011-07-19 23:10 木华 阅读(1110) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理