cpp——与c之不同——struct union

struct

c

  • struct是不同数据类型的聚集体,通过相对于struct首地址的offset获取struct成员,struct每个成员保存了相对于struct首地址的offset和自身字长

c++

struct等同于class,除了默认成员访问权限和默认继承方式不同
  • class默认成员访问权限为private,默认继承方式为private
  • struct默认成员访问权限为public,默认继承方式为public
class CAnimal
{
    int food1;
    
public:
    int food2;
};

struct SAnimal
{
    int food1;
    
public:
    int food2;
};

class CDog1 : CAnimal
{
};

class CDog2 : SAnimal
{
};

struct SDog1 : CAnimal
{
};

struct SDog2 : SAnimal
{
};

void member_access_privilege()
{
    CAnimal c_animal;
    SAnimal s_animal;
    
    //c_animal.food1 = 1;  //private
    c_animal.food2 = 2;
    
    s_animal.food1 = 1;
    s_animal.food2 = 2;
    
    CDog1 c_dog1;
    CDog2 c_dog2;
    
    //c_dog1.food1 = 1;  //private
    //c_dog1.food2 = 2;  //private
    
    //c_dog2.food1 = 1;  //private
    //c_dog2.food2 = 2;  //private
    
    SDog1 s_dog1;
    SDog2 s_dog2;
    
    //s_dog1.food1 = 1;  //private
    s_dog1.food2 = 2;
    
    s_dog2.food1 = 1;
    s_dog2.food2 = 2;
}
总结:
  • class默认成员访问权限为private,struct默认成员访问权限为public
  • 子类为class,默认继承方式为private,子类为struct,默认继承方式为public,即默认继承方式决定于子类的class或struct,与父类的class或struct无关
  • c++ struct几乎等同于class,仅仅在于默认成员访问权限和默认继承方式的不同,c++ struct意义已明显不同于c struct,因此c++中应避免使用struct,一概使用class,以免与c struct混淆
  • 应该显式指定成员访问权限和继承方式,避免使用默认成员访问权限和默认继承方法

union

c

  • union是一种特殊的c struct,union是所有成员相对于首地址的offset均为0的c struct

c++

  • union是一种特殊的c++ struct,union是所有成员相对于首地址的offset均为0的c++ struct
注:因为union所有成员相对于首地址的offset均为0,因此union不允许包含vptr指针,因此union不允许包含virtual成员函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值