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++构造函数初始化列表

  • 2013年04月28日 21:32
  • 3KB
  • 下载

c++构造函数小测验

  • 2014年09月02日 11:19
  • 39KB
  • 下载

C++之带有默认参数值的构造函数

在一个类中 ,如果程序员没有写,任何一个构造函数,则编译器将为该类提供一个默认的构造函数,如果程序员对类的构造函数进行了重载,则编译器将不提供默构造函数,这里需要手动书写一个无参的构造函数, 无参的...

C++构造函数的剖析

  • 2010年05月31日 14:38
  • 754KB
  • 下载

c++构造函数实例质料

  • 2011年05月08日 23:00
  • 30KB
  • 下载

c++类中系统默认拷贝构造函数的解析

我们在定义了一个c++类后, 如果我们自己没有写拷贝构造函数 , 那么系统就会系统一个默认的拷贝构造函数 , 但如果我们类中存在指针等地址变量时 , 就会发生意想不到的结构: 代码1、调用系统拷贝构...

C++构造函数重载

  • 2013年04月02日 19:25
  • 4.79MB
  • 下载

C++拷贝构造函数和赋值操作

  • 2012年01月10日 13:51
  • 3KB
  • 下载

C++继承的理解与四种默认构造函数探索

继承定义 继承的目的: 是为了面向对象的复用,所谓复用就是父类是子类的一部分。继承的定义:c++中一个子类(派生类)可以由一个父类(基类)派生而来,这是单继承;一个子类由多个基类派生而来,这叫多继承...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++默认构造函数
举报原因:
原因补充:

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