C++中创建一个空类:
class Empty {};
默认会生成4个函数,其函数的原型如下:

public: Empty() { ... }

Empty(const Empty& rhs) { ... }

~Empty() { ... }

Empty& operator=(const Empty& rhs) { ... }

说明:1) 这些函数只有在需要调用的时候,编译器才会生成。

2) 4个函数都是public的。

3) 4个函数都是inline的(即函数定义在类的定义中的函数)。

4) 如果你显式的声明了这些函数中的任何一个函数,那么编译器将不再生成默认的函数。

比如,当遇到下列语句时,函数会被编译器生成:

Empty e1; //默认构造函数

//对象销毁时,析构函数Empty e2(e1); //

拷贝构造函数e2 = e1; //赋值运算符

另外,还存在两种默认的函数:就是取地址运算符和取地址运算符的const版本,这两个函数在《Effective C++》中没有提及。

public: Empty* operator&() { ... }

const Empty* operator&() const { ... }

这两个函数是确实存在的,正如下面的代码可以正常工作:

#include <stdio.h>class Empty {};

int main(int argc, char** argv)

{ Empty a;

const Empty *b = &a; printf("%p/n", &a); //调用取地址运算符

printf("%p/n", b); //调用const取地址运算符}

一个容易被忽略的问题:自定义的拷贝构造函数不仅会覆盖默认的拷贝构造函数,也会覆盖默认的构造函数。下面的代码是编译不过的,用户必须再显式的定义一个无参的构造函数。

class Empty {

public: Empty(const Empty& e) { }

//拷贝构造函数};

int main(int argc, char** argv){ Empty a;}

C++中的空类,编译器默认可以产生哪些成员函数相关推荐

  1. C++中的空类,默认产生哪些类成员函数?

    class Empty { public:/*Empty();//默认构造函数Empty(const Empty& rhs);//拷贝构造函数~Empty();//析构函数Empty& ...

  2. C++空类的默认成员函数总结

    C++空类的默认成员函数总结 做IT就要做精英,至少4000/月吧? JAVAV工程师权威认证 [上海央邦]学一送一,超值![安博亚威]CCIE考试通过率第一! 定向委培RHCA,通过考试年薪10W ...

  3. 在c++中一个空类占用的字节数

    结论:  在c++中一个空类占用:1Byte. 有的同学认为一个空类占0Byte,那么定义一个空类时,他存放到哪里呢?为此,在c++编译器中,为空类设置了占用1Byte内存. #include < ...

  4. C++中的空类与空结构体大小

    今天面试遇到了一个很有意思的问题,即空结构体在C++中所占的内存大小是多少?参见如下代码: #include <iostream> struct S0 { };int main() {st ...

  5. 类的const和非const成员函数的重载

    我们从一个例子说起,来看上一篇文章中的String类, 我们为它提供一个下标操作符([ ])以读写指定位置的字符(char). 只要了解过C++的操作符重载的语法,很快就可以写出下面这个[]操作符重载 ...

  6. 成员函数对象类的const和非const成员函数的重载

    首先声明,我是一个菜鸟.一下文章中出现技术误导情况盖不负责 1. 类的const成员函数与非const成员函数的载重 #include <iostream> #include <st ...

  7. C++ 空类,默认产生哪些成员函数

    默认构造函数.默认拷贝构造函数.默认析构函数.默认赋值运算符 这四个是我们通常大都知道的.但是除了这四个,还有两个,那就是取址运算符和 取址运算符 const 即总共有六个函数. 一个示例如下: cl ...

  8. 号)、sex(性别)、birthday(出生日期)、id(身份证号)等等。其中“出生日期”定义为一个“日期”类内嵌子对象。用成员函数实现对人员信息的录入和显示。要求包括:构造函数和析构函数、拷贝构造函

    #include<iostream> #include <string>  using namespace std; class time{ public: time(){}; ...

  9. C/C++ 类默认生成的四个函数

    序:对于一个空类,编译器默认生成四个成员函数:默认构造函数.析构函数.拷贝构造函数.赋值函数 一,默认构造函数 默认构造函数(default constructor)就是在没有显式提供初始化式时调用的 ...

最新文章

  1. ClickHouse 系列教程五:多种连接方法
  2. 【AI-CPS】【工业互联网】从观望到行动:全球工业物联网市场生态全景观察
  3. 算法73----用户喜好
  4. HDU2602-Bone Collector
  5. Redash 9安装与配置(基于Docker方式)
  6. 反向传播算法 Backpropagation Algorithm
  7. python 逐行读取csv_在R中如何逐行读取CSV文件并将内容识别为正确的数据类型?...
  8. (搬家文) c++引用深入探讨
  9. windowsXP/7下消除快捷键箭头的方法
  10. html5获取城市,HTML5 geolocation API获得用户当前城市名
  11. spring中log4j使用
  12. Word表格高度不能调小
  13. 最大一笔收购,Pokémon Go开发商Niantic收购AR开发平台8th Wall
  14. 语音信号处理入门入籍和课程推荐
  15. 【uni-app】uni-app移动端开发 - 登录界面
  16. mipi的dsi全称_MIPI-DSI/CSI协议介绍-转载
  17. C. Game Master(强连通分量,缩点,建图
  18. chrono是一个time library,C++11 std::chrono库详解
  19. UI设计就业前景广阔无边,入门正当时!
  20. 图像旋转源程序c语言,图像旋转 - 红尘潇洒,独自前行,但尽人事,莫问前程 - OSCHINA - 中文开源技术交流社区...

热门文章

  1. OpenCV像素点处理 1
  2. 【正一专栏】春日随感—赢在起跑线上
  3. Jsoup实现Iteye自动登录
  4. 使用WinSetupFromUSB来U盘安装windowsXP(不使用win PE系统)
  5. you don't have permission to access /xxx/xxx解决
  6. 何杰月c语言课程,北京西城区教育科研月:学科核心素养的教学探索
  7. html中使用js将axios请求封装
  8. Consul 服务注册与发现03—— 服务消费者
  9. pageX,clientX,offsetX,layerX的区别
  10. Python+selenium 自动化-操作已启用的chrome浏览器实例演示,chrome启用调试端口方法