C++ 默认构造函数

来源:互联网 发布:最好的网络电话软件 编辑:程序博客网 时间:2024/06/05 04:14

默认构造函数

默认的构造函数是指为所有参数都提供了默认值的构造函数,通常是指无参的构造函数。比如下面的类A,默认构造函数即为A()。

Class A{    public:    A(){}//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 ; } 
原创粉丝点击