默认构造函数的概念是什么?

时间:2011-10-02 12:14:34

标签: c++ programming-languages

帮助我通过示例获取默认构造函数的概念。 我不知道何时在程序中使用默认构造函数以及何时不使用。 帮助我解决这个问题。以一个例子为我解释它。 何时需要使用它?

#include<iostream>
using namespace std;

class abc
{
public:
    abc()
    {
        cout<<"hello";
    }
};

int main()
{
    abc a;
    system("pause");
    return 0;
}

那么实际上默认构造函数的用途是什么以及何时需要使用它?

4 个答案:

答案 0 :(得分:2)

符合概念DefaultConstrutible的类允许使用以下表达式(N3242第17.6.3.1段):

T u; // object is default initialized
T u{}: // object is value intialized
T(); T{}; // value initialized temporary

这个概念太多了。第12.1 / 5段实际上告诉我们默认构造函数是什么

  

类X的默认构造函数是类X的构造函数   可以不带参数调用。如果没有用户声明   类X的构造函数,没有参数的构造函数   隐含地宣布为违约(8.4)。隐式声明的默认值   构造函数是其类的内联公共成员。 ...

通过引入已删除的特殊成员函数,该标准还定义了一个案例列表,其中没有隐式默认构造函数可用,以及普通和非普通默认构造函数的区别。

答案 1 :(得分:1)

  • 构造函数是一个特殊的函数,没有返回类型。其名称必须作为类\ struct名称。它没有实际名称作为函数,正如Kerrek-SB指出的那样。
  • 默认构造函数是没有参数的构造函数,或者具有默认值的参数。
  • 构造函数被称为仅一次 - 实例化对象时
  • 通过new表达式或初始化表达式调用构造函数。它不能称为“手动”。
  • 用于初始化对象的字段,通常使用member initializer list

检查this.

答案 2 :(得分:1)

如果您的类被实例化,则不需要执行任何操作。使用默认构造函数,您将不得不使用自己的构造函数,因为默认构造函数基本上什么都不做。 您也不需要编写任何“默认”构造函数。

class abc {
};

int main() {
abc a;  //don't want to do anything on instatiation
system("pause");
return 0;
}

class abc {
private:
int a;
public:
abc(int x) { a = x };
}


int main() {
abc a(1); //setting x to 1 on instantiation
system("pause");
return 0;
}

答案 3 :(得分:-1)

默认构造函数是没有参数的构造函数,将在以下情况下调用:

  • 在没有任何构造函数的情况下实例化或修改类的对象,例如:

    abc a;
    abc* aptr=new abc;
    
  • 声明一个类的数组,如:

    abc a_array[10];
    
  • 当你有一个不会调用其中一个基类构造函数的继承类时

  • 如果您的班级中有一个来自另一个班级的功能,并且您没有调用该功能班级的明确构造函数。
  • 当您使用某些标准库的容器(例如vector)时,例如:

    vector <abc> abc_list;
    

在这些情况下,您必须有一个默认构造函数,否则如果您没有任何构造函数,编译器将生成一个没有操作的隐式默认构造函数,如果您有一些构造函数,编译器将显示编译错误。 如果要执行上述操作之一,请使用默认构造函数来确保正确实例化每个对象。