Merge pull request #206 from CYP12138/master
编译器优化sizeof,private继承访问权限更改
This commit is contained in:
@@ -93,7 +93,7 @@ int main()
|
||||
/**
|
||||
* @file geninhe.cpp
|
||||
* @brief 1.普通单继承,继承就是基类+派生类自身的大小(注意字节对齐)
|
||||
* 注意:类的数据成员按其声明顺序加入内存,与访问权限无关,只看声明顺序。
|
||||
* 注意:类的数据成员按其声明顺序加入内存,无访问权限无关,只看声明顺序。
|
||||
* 2.虚单继承,派生类继承基类vptr
|
||||
* @author 光城
|
||||
* @version v1
|
||||
@@ -117,7 +117,14 @@ class A
|
||||
* int b
|
||||
* short a
|
||||
* long b
|
||||
* 根据字节对齐4+4=8+8+8=24
|
||||
* 根据字节对齐4+4+8+8=24
|
||||
*
|
||||
* 或编译器优化
|
||||
* char a
|
||||
* short a
|
||||
* int b
|
||||
* long b
|
||||
* 根据字节对齐2+2+4+8=16
|
||||
*/
|
||||
class B:A
|
||||
{
|
||||
@@ -125,24 +132,30 @@ class B:A
|
||||
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 A1
|
||||
class C1:public A
|
||||
{
|
||||
};
|
||||
|
||||
|
||||
int main()
|
||||
{
|
||||
cout<<sizeof(A)<<endl; // 8
|
||||
cout<<sizeof(B)<<endl; // 24
|
||||
cout<<sizeof(B)<<endl; // 16 或 24
|
||||
cout<<sizeof(C)<<endl; // 12
|
||||
|
||||
/**
|
||||
* @brief 对于虚单函数继承,派生类也继承了基类的vptr,所以是8字节
|
||||
*/
|
||||
|
@@ -25,7 +25,14 @@ class A
|
||||
* int b
|
||||
* short a
|
||||
* long b
|
||||
* 根据字节对齐4+4=8+8+8=24
|
||||
* 根据字节对齐4+4+8+8=24
|
||||
*
|
||||
* 或编译器优化
|
||||
* char a
|
||||
* short a
|
||||
* int b
|
||||
* long b
|
||||
* 根据字节对齐2+2+4+8=16
|
||||
*/
|
||||
class B:A
|
||||
{
|
||||
@@ -33,6 +40,9 @@ class B:A
|
||||
short a;
|
||||
long b;
|
||||
};
|
||||
/**
|
||||
* 把A的成员拆开看,char为1,int为4,所以是1+(3)+4+1+(3)=12,()为字节补齐
|
||||
*/
|
||||
class C
|
||||
{
|
||||
A a;
|
||||
@@ -51,7 +61,7 @@ class C1:public A
|
||||
int main()
|
||||
{
|
||||
cout<<sizeof(A)<<endl; // 8
|
||||
cout<<sizeof(B)<<endl; // 24
|
||||
cout<<sizeof(B)<<endl; // 16
|
||||
cout<<sizeof(C)<<endl; // 12
|
||||
|
||||
/**
|
||||
|
@@ -1,14 +1,30 @@
|
||||
һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м̳<EFBFBD>
|
||||
1.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>protected<65>ij<EFBFBD>Ա
|
||||
<EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Է<EFBFBD><EFBFBD><EFBFBD>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><EFBFBD><EFBFBD>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Է<EFBFBD><EFBFBD><EFBFBD>
|
||||
<EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Է<EFBFBD><EFBFBD>ʣ<EFBFBD>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><EFBFBD>ʣ<EFBFBD>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Է<EFBFBD><EFBFBD>ʣ<EFBFBD>
|
||||
2.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɷ<EFBFBD><C9B7>ʻ<EFBFBD><CABB><EFBFBD><EFBFBD><EFBFBD>private<74><65>Ա
|
||||
3.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɷ<EFBFBD><C9B7>ʻ<EFBFBD><CABB><EFBFBD><EFBFBD><EFBFBD>protected<65><64>Ա
|
||||
4.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɷ<EFBFBD><C9B7>ʻ<EFBFBD><CABB><EFBFBD><EFBFBD><EFBFBD>public<69><63>Ա
|
||||
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> public<69>̳<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
public -> public
|
||||
|
||||
protected -> protected
|
||||
|
||||
private -> <20><><EFBFBD>ɷ<EFBFBD><C9B7><EFBFBD>
|
||||
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˽<EFBFBD>м̳<EFBFBD>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɷ<EFBFBD><EFBFBD>ʻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κγ<EFBFBD>Ա<EFBFBD>뺯<EFBFBD><EFBFBD>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD>ɷ<EFBFBD><EFBFBD>ʻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>private<EFBFBD><EFBFBD>Ա
|
||||
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> private<74>̳<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
public -> private
|
||||
|
||||
protected -> private
|
||||
|
||||
private -> <20><><EFBFBD>ɷ<EFBFBD><C9B7><EFBFBD>
|
||||
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳<EFBFBD>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽΪprotected<EFBFBD>ļ̳г<EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ּ̳з<EFBFBD>ʽ<EFBFBD>£<EFBFBD>
|
||||
@@ -16,6 +32,14 @@
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>protected<EFBFBD><EFBFBD>private<EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD><EFBFBD><EFBFBD>Ȩ<EFBFBD><EFBFBD>
|
||||
ע<EFBFBD><EFBFBD><EFBFBD>㣺<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳е<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>public<EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD>Ϊprotected<EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD>߲<EFBFBD><EFBFBD>ɷ<EFBFBD><EFBFBD>ʣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɷ<EFBFBD><EFBFBD>ʣ<EFBFBD>
|
||||
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> protected<65>̳<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
public -> protected
|
||||
|
||||
protected -> protected
|
||||
|
||||
private -> <20><><EFBFBD>ɷ<EFBFBD><C9B7><EFBFBD>
|
||||
|
||||
|
||||
<EFBFBD>ġ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD>ķ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
|
||||
1.ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>ӷ<EFBFBD><D3B7>ʻ<EFBFBD><CABB><EFBFBD><EFBFBD><EFBFBD>Ա
|
||||
|
Reference in New Issue
Block a user