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

C++构造函数

  • 2013-04-16 09:26
  • 288KB
  • 下载

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

继承定义 继承的目的: 是为了面向对象的复用,所谓复用就是父类是子类的一部分。继承的定义:c++中一个子类(派生类)可以由一个父类(基类)派生而来,这是单继承;一个子类由多个基类派生而来,这叫多继承...

c++构造函数小测验

  • 2014-09-02 11:19
  • 38KB
  • 下载

C++构造函数的剖析

  • 2010-05-31 14:38
  • 754KB
  • 下载

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

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

c++构造函数实例质料

  • 2011-05-08 23:00
  • 30KB
  • 下载

C++构造函数

  • 2014-06-16 13:10
  • 10KB
  • 下载

C++对象模型学习笔记(二)--默认构造函数

在文章开始之前,首先指出对于c++新手的两个常见的误解:    一、任何class如果没有定义default constructor,就会被合成出一个来。    二、编译器合成出来的default...

C++中拷贝构造函数的使用

  • 2012-07-29 08:56
  • 275KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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