打印

[求助] c++虚函数内存实现问题

c++虚函数内存实现问题

小弟正在学习c++,想问一下虚函数内存实现的相关问题。
代码如下:(调试平台是VC++6.0。Windows sp2)
#include <iostream.h>

class vehicle
{
private:
int MaxSpeed;
int Weight;
public:
vehicle(){MaxSpeed=0; Weight=0;};
~vehicle(){};
virtual void Run() {cout << "A vehicle is running!" << endl; }
virtual void Stop() {cout << "A vehicle has stopped!" << endl; }
};
class bicycle : virtual public vehicle
{
private:
int Height;
public:
bicycle(){};
~bicycle(){};
void Run() {cout << "A bicycle is running!" << endl; }
void Stop() {cout << "A bicycle has stopped!" << endl; }
};

class motorcar : virtual public vehicle
{
private:
int SeatNum;
public:
motorcar(){};
~motorcar(){};
void Run() {cout << "A motorcar is running!" << endl; }
void Stop() {cout << "A motorcar has stopped!" << endl; }
};

class motorcycle : public bicycle , public motorcar
{
public:
motorcycle (){};
~motorcycle (){};
void Run() {cout << "A motorcycle is running!" << endl; }
void Stop() {cout << "A motorcycle has stopped!" << endl; }
};
void main()
{
vehicle * ptr;
vehicle a;
bicycle b;
motorcar c;
motorcycle d;
a.Run();
a.Stop();
b.Run();
b.Stop();
c.Run();
c.Stop();
d.Run();
d.Stop();
ptr = &a;
ptr->Run();
ptr = &b;
ptr->Run();
ptr = &c;
ptr->Run();
ptr = &d;
ptr->Run();
cout<<"int类型的大小"<<sizeof(int)<<endl;
cout<<"指针类型的大小"<<sizeof(ptr)<<endl;
cout<<"vehicle类a的大小"<<sizeof(a)<<endl;
cout<<"bicycle类b的大小"<<sizeof(b)<<endl;
cout<<"motorcar类c的大小"<<sizeof(c)<<endl;
cout<<"motorcycle类d的大小"<<sizeof(d)<<endl;
}
但最后结果为 :
A vehicle is running!
A vehicle has stopped!
A bicycle is running!
A bicycle has stopped!
A motorcar is running!
A motorcar has stopped!
A motorcycle is running!
A motorcycle has stopped!
A vehicle is running!
A bicycle is running!
A motorcar is running!
A motorcycle is running!
int类型的大小4
指针类型的大小4
vehicle类a的大小12
bicycle类b的大小24
motorcar类c的大小24
motorcycle类d的大小32


其中
bicycle类b的大小24
motorcar类c的大小24
motorcycle类d的大小32 这三个结果和预计的不一样,网上查说是编译器给对象隐藏加入了一个指向虚函数表的指针,所以结果中——>vehicle类a的大小12<———的12是两个整型数据和一个指针的大小。但对象b。c。d的大小为何是24.24.和32就不知道了~~所以请求大侠们讲解讲解!!
附件: 您所在的用户组无法下载或查看附件

TOP

不太懂

TOP

类只有其成员变量计算大小,成员函数是不计算大小的,因为编译器编译之后,类的成员函数就相当于C语言的普通函数。而由于对齐、虚函数、虚继承等原因,类的大小也不是简单的成员变量所占大小直接相加。另外也跟编译器的实现有关,即相同的类定义有可能在不同的编译器中大小也不相同。

TOP

问题已解决!!虚拟继承也会加入一个指针!!o(∩_∩)o...

TOP

本功能由奇虎搜索实现

相关主题

标题 作者 最后发表
一秒钟关机的危害 蓝色枫叶 2008-07-07
应聘Java笔试时可能出现问题及其答案 maplenet 2008-03-21
黑客精品软件更新 empty 2008-06-12
点击阅读更多关于的相关帖子  更多相关主题