-
Notifications
You must be signed in to change notification settings - Fork 8.5k
/
geninhe.cpp
64 lines (57 loc) · 1.12 KB
/
geninhe.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/**
* @file geninhe.cpp
* @brief 1.普通单继承,继承就是基类+派生类自身的大小(注意字节对齐)
* 注意:类的数据成员按其声明顺序加入内存,无访问权限无关,只看声明顺序。
* 2.虚单继承,派生类继承基类vptr
* @author 光城
* @version v1
* @date 2019-07-21
*/
#include <iostream>
using namespace std;
class A {
public:
char a;
int b;
};
/**
* @brief 此时B按照顺序:
* char a
* int b
* short a
* long b
* 根据字节对齐4+4+8+8=24
*
* 或编译器优化
* char a
* short a
* int b
* long b
* 根据字节对齐2+2+4+8=16
*/
class B : A {
public:
short a;
long b;
};
/**
* 把A的成员拆开看,char为1,int为4,所以是1+(3)+4+1+(3)=12,()为字节补齐
*/
class C {
A a;
char c;
};
class A1 {
virtual void fun() {}
};
class C1 : public A {};
int main() {
cout << sizeof(A) << endl; // 8
cout << sizeof(B) << endl; // 16
cout << sizeof(C) << endl; // 12
/**
* @brief 对于虚单函数继承,派生类也继承了基类的vptr,所以是8字节
*/
cout << sizeof(C1) << endl; // 8
return 0;
}