面试总结之C++类默认缺省函数
来源:互联网 发布:js抽奖转盘视频教程 编辑:程序博客网 时间:2024/06/06 05:17
一、编译器定义的默认缺省函数
编译器会为每一个类产生六个缺省函数:
构造函数
拷贝构造函数
析构函数
赋值运算符重载
取地址运算符重载
取地址运算符重载(const版)
这六个函数的实现如下:
Demo::Demo() //缺省构造函数 {}Demo::~Demo() //析构函数 {}Demo *Demo::operator&() //取址运算符(非const) {return this;}const Demo *Demo::operator&() const //取址运算符(const) {return this;}Demo::Demo(const Demo &rhs) //拷贝构造函数 {//对类的非静态数据成员进行以"成员为单位"逐一拷贝构造 //固定类型的对象拷贝构造是从源对象到目标对象的"逐位"拷贝 }Demo& Demo::operator=(const Demo &rhs) //赋值运算符 {//对类的非静态数据成员进行以"成员为单位"逐一赋值 //固定类型的对象赋值是从源对象到目标对象的"逐位"赋值。 }二、关于空类的大小
空类在定义时并没有上面说的六个函数,只有一个字节的占位符,当需要用到时编译器才会生成上面六个函数。
//定义三个类class Foo1 {};class Foo2 { public:virtual void foo(); };class Foo3 :public Foo1, public Foo2 {public:virtual void foo();};
//输出三个类的大小cout << sizeof(Foo1) << endl;cout << sizeof(Foo2) << endl;cout << sizeof(Foo3) << endl;//输出三个实例对象的大小Foo1 f1;Foo2 f2;Foo3 f3;cout << sizeof(f1) << endl;cout << sizeof(f2) << endl;cout << sizeof(f3) << endl;上面的输出结果是1 4 4 1 4 4
首先,三个类的大小。Foo1是一个空类,只有一个字节的占位符,Foo2有一个虚函数,所有有一个指向虚函数的指针,因此Foo2的大小是4个字节。Foo3继承Foo1和Foo2,取消了Foo1的占位字节,继承了Foo2的虚函数,也是4个字节。
类被实例化时编译器会生成上面的六个函数,但对象的大小仍然跟类一样。
0 0
- 面试总结之C++类默认缺省函数
- 【C++总结】带有默认参数的函数,缺省函数
- 【c/c++】构造函数的默认参数以及缺省参数值
- 虚函数继承的默认缺省参数
- 【C++缺省函数】 空类默认产生的6个类成员函数
- 【C++缺省函数】 空类默认产生的6个类成员函数
- 用汇编的眼光看c++(之模板函数) ,(之缺省模板、特化模板) .
- More Effective C++:避免缺省构造函数
- c++之类的默认缺省函数自编写
- 我的小小学习笔记(5)之C++-----缺省函数
- 嵌入式面试总结-C语言函数相关
- (总结)C++的构造函数(初始化列表,缺省/复制和带默认参数的构造函数)和析构函数详解
- C++初识之函数重载、缺省参数
- 缺省函数
- C++之缺省参数的构造函数、缺省的构造函数及缺省的析构函数
- 总结程序员面试之C C++
- C++ 类的6个缺省函数
- 第 5 页 构造函数、默认构造函数、 缺省构造函数
- 导入项目遇到jar包冲突
- Error:java.lang.NullPointerException (no error message)
- 使用Visual Studio 2017作为Linux C++开发工具
- 我的博客开通啦
- 打造 Vue.js 可复用组件
- 面试总结之C++类默认缺省函数
- 串的匹配算法(朴素&KMP)
- html5构建基本画图程序
- Nginx/LVS/HAProxy负载均衡软件的优缺点详解
- linux安装软件的几种方法
- Android中项目无法导入,关于Gradle踩过的一些坑
- Material Design-UI之Toolbar+DrawerLayout
- 关于Gradle的坑
- 指针复杂类型