- 先看 普通菱形继承
#include <iostream>
#include <string>
using namespace std;
class Animal {int a_age;
};
class Sheep : public Animal {};
class Tuo : public Animal {};
class SheepTuo : public Sheep, public Tuo {};
void test1() {cout << sizeof(Animal) << endl; //4cout << sizeof(Sheep) << endl; //4cout << sizeof(SheepTuo) << endl; //8
}
int main()
{test1();return 0;
}
使用vs提供的开发者命令行工具,位置在 C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\Shortcuts, 打开切换到 cpp文件所在目录
cl /d1 reportSingleClassLayout类名 文件名
对象模型如下:
2 菱形继承 使用了虚继承 virtual 后的对象模型
#include <iostream>
#include <string>
using namespace std;
class Animal {int a_age;
};
class Sheep : virtual public Animal {};
class Tuo : virtual public Animal {};
class SheepTuo : public Sheep, public Tuo {};
void test1() {cout << sizeof(Animal) << endl; //4cout << sizeof(Sheep) << endl; //8cout << sizeof(SheepTuo) << endl; //12
}
int main()
{test1();return 0;
}
疑惑:
- C++ 在64位机器中 , 任何指针 占用的字节数都是四个字节吗?