C++ 类的6个缺省函数
来源:互联网 发布:淘宝官网网页版 编辑:程序博客网 时间:2024/05/22 03:35
在C++中默认产生6个类成员函数,即缺省函数,它们分别是:
- 缺省构造函数
- 缺省拷贝构造函数
- 缺省析构函数
- 缺省赋值运算符
- 缺省取址运算符
- 缺省取地址运算符const
很多人以为只有前4个缺省函数,事实上有6个。
代码验证如下:
#include <iostream>using namespace std;class A{public: A() { cout<<"构造函数"<<endl; } ~A() { cout<<"希构函数"<<endl; } A(const A &) { cout<<"拷贝构造函数"<<endl; } A& operator=(const A &) { cout<<"赋值运算"<<endl; } A* operator&() { cout<<"取地址"<<endl; } const A* operator&()const { cout<<"const取地址"<<endl; }};int main(int argc, char **argv){ A c1; A c2 = c1; c2 = c1; A *pa = &c1; const A c3; const A * pb = &c3; return 0;}
可见,我们在没有写函数功能的情况下,进行构造,析构,拷贝等等操作都是可以实现的,这就是6个缺省函数的功劳了。
注意,很多人在这里有一个误区。
是不是构造一个 空类,这个空类就已经有6个默认缺省函数了?
这是错误的!请看代码:
#include <iostream>using namespace std;class A{};int main(){ cout<<"空类A的大小:"<<sizeof(A)<<endl; return 0;}
测试空类的大小,得出: 空类A的大小为 1 。
对于空类,编译器不会生成任何成员函数!只会生成1个字节的占位符。
空类也是可以被实例化的,而每个实例在内存中都是独一无二的地址,为了达到这个目的,编译器往往会给一个空类隐含的加一个字节,这样空类在实例化后就可以得到了独一无二的地址,这就是一个占位符的意义。
那么什么时候才会生成6个缺省默认成员函数呢?
编译器只会在需要的时候生成,也就是说,在第一个代码main()中:
A c1; 构造c1才会生成构造函数;
A c2 = c1; 拷贝构造c2时才会生成拷贝构造函数;
同样析构c1,c2时,才会构造析构函数,依次类推~
(也会默认构造一个this指针)
2 0
- C++ 类的6个缺省函数
- 【C++缺省函数】 空类默认产生的6个类成员函数
- 【C++缺省函数】 空类默认产生的6个类成员函数
- class中缺省的4个函数的实现
- 函数的缺省参数
- 函数的缺省参数
- 函数的缺省参数
- 函数的缺省参数
- 构造函数的参数缺省
- php函数的缺省参数
- C++ 函数的缺省参数
- C++缺省参数的函数
- More Effective C++:避免缺省构造函数
- CWnd类虚函数的调用时机、缺省实现
- More Effective C++----(4)避免无用的缺省构造函数 & (5)谨慎定义类型转换函数
- 【c/c++】构造函数的默认参数以及缺省参数值
- 缺省函数
- 用汇编的眼光看c++(之模板函数) ,(之缺省模板、特化模板) .
- mysql带 between and 的范围查询
- python《注释+反斜扛的妙用》
- 软件测试
- OpenGL三维坐标与二维坐标:gluProject 和 gluUnproject 的详解
- Python基础
- C++ 类的6个缺省函数
- Android 关于 OnScrollListener 事件顺序次数的简要分析
- GDI+(绘圆)
- Python学习资料推荐
- mysql带 like 的模糊查询
- 第八周项目4-指向学生类的指针
- LaTeX文档插入图片的几种常用方法
- 终端接口
- 一段程序代码 --- 实现解析字典,自动转换生成属性。