C++默认构造函数

转载 2015年07月09日 17:25:33

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 ; 
} 
复制代码

C++ 默认构造函数的重要性

1、默认构造函数 C++ 默认构造函数是对类中的参数提供默认值的构造函数,一般情况下,是一个没有参数值的空函数,也可以提供一些的默认值的构造函数,如果用户没有定义构造函数,那么编译器会给类提供一个默...
  • apacat
  • apacat
  • 2016年06月12日 15:37
  • 588

c++编译器何时会生成默认构造函数

转自:点击打开链接 默认的构造函数是指为所有参数都提供了默认值的构造函数,通常是指无参的构造函数。比如下面的类Test,它的默认构造函数就是Test()。 class Test { publi...
  • zjcxhswill
  • zjcxhswill
  • 2016年02月16日 23:22
  • 1420

c++什么时候会生成默认构造函数

C++对象可以使用两种方式进行创建:构造函数和复制构造函数。假如我们定义了类A,并使用它创建对象。 代码如下: A a,b; A c=a; A d(b); 对象a和b使用编译器提...
  • doprasystem
  • doprasystem
  • 2016年11月22日 20:36
  • 636

C++ Primer中的陌生概念二:default默认构造函数

在C++新标准中,如果我们需要默认的行为,那么可以通过在参数列表后面写上=default来要求编译器生成构造函数。其中,=default既可以和声明一起出现在类的内部,也可以作为定义出现在类的外部。和...
  • liminwang0311
  • liminwang0311
  • 2016年12月13日 21:28
  • 384

c++构造函数之四种默认构造方式

c++构造函数的知识在各种c++教材上已有介绍,不过初学者往往不太注意观察和总结其中各种构造函数的特点和用法,故在此我根据自己的c++编程经验总结了一下c++中各种构造函数的特点,并附上例子,希望对初...
  • qq_28337005
  • qq_28337005
  • 2016年06月26日 17:33
  • 3473

C++初始化列表中无默认构造函数的成员的初始化

在初始化列表中,如果我们有一个类成员,它本身是一个类或者是一个结构,而且这个成员它只有一个带参数的构造函数,而没有默认构造函数,这时要对这个类成员进行初始化,就必须调用这个类成员的带参数的构造函数。A...
  • Damon_X
  • Damon_X
  • 2016年06月07日 17:48
  • 1139

什么情况下C++编译器会生成默认的构造函数

问题:对c++初学者来说存在一个误区,如果类没有定义任何构造函数,编译器会自动生成默认的构造函数。   注意:这种说法是错误的。 正确的说法:惟有默认构造函数”被需要“的时候编译器才会合成默认构造...
  • zyl_1102179268
  • zyl_1102179268
  • 2017年03月05日 00:01
  • 764

c++ 没有默认构造函数类不能用作动态分配数组的元素

最近看《c++ Primer》
  • gty55044
  • gty55044
  • 2014年10月17日 20:59
  • 1254

C++ 构造函数、默认构造函数、析构函数和对象初始化

#include using namespace std; class Student{ private: int m_age; int m_grade; ...
  • ivnetware
  • ivnetware
  • 2016年12月10日 12:37
  • 932

详叙C++的构造函数,默认构造函数与析构函数

//声明一个Data类 class Data { public: Data(int _year, int _month, int _day) ://构造函数 year(_year), month(_m...
  • weizhengbo
  • weizhengbo
  • 2017年02月15日 19:29
  • 493
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++默认构造函数
举报原因:
原因补充:

(最多只允许输入30个字)