帮助我通过示例获取默认构造函数的概念。 我不知道何时在程序中使用默认构造函数以及何时不使用。 帮助我解决这个问题。以一个例子为我解释它。 何时需要使用它?
#include<iostream>
using namespace std;
class abc
{
public:
abc()
{
cout<<"hello";
}
};
int main()
{
abc a;
system("pause");
return 0;
}
那么实际上默认构造函数的用途是什么以及何时需要使用它?
答案 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)
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;
在这些情况下,您必须有一个默认构造函数,否则如果您没有任何构造函数,编译器将生成一个没有操作的隐式默认构造函数,如果您有一些构造函数,编译器将显示编译错误。 如果要执行上述操作之一,请使用默认构造函数来确保正确实例化每个对象。