【C++缺省函数】 空类默认产生的6个类成员函数

C++中的空类在定义时,编译器会自动生成6个默认成员函数:缺省构造函数、拷贝构造函数、析构函数、赋值运算符、以及两个取址运算符。虽然空类在声明时不会生成成员函数,但在实例化对象时,这些函数会被用于对象的创建、复制和销毁等操作。
摘要由CSDN通过智能技术生成
1、缺省构造函数。
2、缺省拷贝构造函数。
3、 缺省析构函数。
4、缺省赋值运算符。

5、缺省取址运算符。

6、 缺省取址运算符 const。


<span style="font-size:18px;">
class A  
{  
public:  
    A(){}//缺省构造函数  
  
    A(const A&){}//拷贝构造函数  
  
    ~A(){}//析构函数  
  
    A&operator=(const A&){}//赋值运算符  
  
    A*operator&(){}//取址运算符  
  
    const A*operator&()const{}//取址运算符 const  
};
 </span>




       在C++中,编译器会为空类提供哪些默认成员函数?分别有什么样的功能呢? 


空类,声明时编译器不会生成任何成员函数

        对于空类,编译器不会生成任何的成员函数,只会生成1个字节的占位符。

        有时可能会以为编译器会为空类生成默认构造函数等,事实上是不会的,编译器只会在需要的时候生成6个成员函数:一个缺省的构造函数、一个拷贝构造函数、一个析构函数、一个赋值运算符、一对取址运算符和一个this指针。

 代码:

<span style="font-size:18px;">
#include <iostream>  
using namespace std;  
  
class Empty_one  
{  
};  
class Empty_two  
{};  
class Empty_three  
{  
    virtual void fun() = 0;  
};  
class Empty_four :  public Empty_two, public Empty_three  
{  
};  
  
int main()  
{  
  cout<<"sizeof(Empty_one):"<<sizeof(Empty_one)<<endl;  
  cout<<"sizeof(Empty_two):"<<sizeof(Empty_two)<<endl;  
  cout<<"sizeof(Empty_three):"<<sizeof(Empty_three)<<endl;  
  cout<<"sizeof(Empty_four):"<<sizeof(Empty_four)<<endl;  
  return 0;  
}
</span>

结果:

分析:

类Empty_one、Empty_two是空类,但空类同样可以被实例化,而每个实例在内存中都有一个独一无二的地址,为了达到这个目的,编译器往往会给一个空类隐含的加一个字节,这样空类在实例化后在内存得到了独一无二的地址,所以sizeof(Empty_one)和sizeof(Empty_two)的大小为1。

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值