• 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 ; 
    } 

    ==

    作者:zdd
    出处:http://www.cnblogs.com/graphics/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    数据要求说明书
    详细设计说明书
    《机器学习》西瓜书 课后习题参考答案
    机器学习基础 基本术语
    (转)android UI进阶之仿iphone的tab效果
    (转)android UI进阶之弹窗的使用
    (转) Android UI学习 Tab的学习和使用
    (转) android UI进阶之布局的优化(二)
    名言警句
    php的IP转换成整型函数ip2long()出现负数
  • 原文地址:https://www.cnblogs.com/graphics/p/2710340.html
Copyright © 2020-2023  润新知