C++默认构造函数详解
来源:互联网 发布:sqlserver 2016 sn 编辑:程序博客网 时间:2024/06/11 07:46
C++默认构造函数
默认构造函数
默认的构造函数是指为所有参数都提供了默认值的构造函数,通常是指无参的构造函数。比如下面的类Test,它的默认构造函数就是Test()。
class Test{public: Test(){} // default constructor} ;
如果你没有为你的类提供任何构造函数,那么编译器将自动为你生成一个默认的无参构造函数。一旦你为你的类定义了构造函数,哪怕只是一个,那么编译器将不再生成默认的构造函数。
为你的类提供默认的构造函数
有很多原因,列举如下:
1. 当你使用静态分配的数组,而数组元素类型是某个类的对象时,就要调用默认的构造函数,比如下面的代码。
Object buffer[10]; // call default constructor
2. 当你使用动态分配的数组,而数组元素类型是某个类的对象时,就要调用默认的构造函数,比如下面的代码,如果Object没有默认的构造函数,是无法通过编译的,因为new操作符要调用Object类的无参构造函数类初始化每个数组元素。
Object* buffer = new Object[10];
3. 当你使用标准库的容器时,如果容器内的元素类型是某个类的对象时,那么这个类就需要默认的构造函数,原因同上。
vector<Object> buffer;
4. 一个类A以另外某个类B的对象为成员时,如果A提供了无参构造函数,而B未提供,那么A则无法使用自己的无参构造函数。下面的代码将导致编译错误。
class B{ B(int i){}};class A{ A(){} B b;};int main(void) { A a(); // error C2512: 'B' : no appropriate default constructor available ?原因如下: getchar() ; return 0 ; }
再比如下面的代码,类A定义了拷贝构造函数,而没有提供默认的构造函数,B继承自A,所以B在初始化时要调用A的构造函数来初始化A,而A没有默认的构造函数,故产生编译错误。
class A{ A(const A&){}};class B : public A{ };int main(void) { B b; //error C2512:'B': no appropriate default constructor available getchar() ; return 0 ; }
0 0
- C++默认构造函数详解
- C++默认构造函数
- [C++]default constructor默认构造函数
- C/C++—— 默认构造函数是否会执行
- 关于c++默认的构造函数、析构函数、拷贝构造函数、move函数
- 默认构造函数
- 使用默认构造函数
- C++ 默认构造函数
- 关于默认构造函数
- C++ 默认构造函数
- 默认构造函数
- 默认构造函数
- 默认构造函数
- 关于默认构造函数
- 默认构造函数
- C++ 默认构造函数
- C++ 默认构造函数
- 默认构造函数
- expect spawn、linux expect 用法
- js函数前加分号和感叹号是什么意思?有什么用?
- 设计模式之策略模式
- 注册页面判断输入状态
- postgres内存上下文
- C++默认构造函数详解
- Maven里面mirror元素和repository元素的作用
- El表达式小结
- JPEG in DICOM
- Material Design Control 初涉 1
- 用Eclipse的Maven->update project无法把buildpath变成Maven的buildpath
- 详解JS正则replace的使用方法
- 管理工具---Maven系列(一)编译问题
- 博客专栏 >OpenCV学习笔记