- 先看 普通菱形繼承
#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位機器中 , 任何指針 占用的字節數都是四個字節嗎?