好的,我的作业非常简单。
我为Person类提供了这两个构造函数:
Person( const string &, const string &, const string & );
Person( const string &, const string &, const string &,
const string & );
我有4个默认值
其中哪些将成为默认构造函数?它总是最有争议的一个或它是如何工作的?
答案 0 :(得分:9)
根据C ++标准
4类X的默认构造函数是类X的构造函数 可以不带参数调用。
从您的帖子中不清楚您所说的默认值。您的声明都不是默认构造函数。
如果您在声明
中谈论默认参数Person( const string & = "", const string & = "", const string & = "",
const string & = "" );
然后,此声明是默认构造函数的声明,因为可以在没有任何显式指定的参数的情况下调用它。
值得注意的是,相同的构造函数可以同时是默认构造函数和非默认构造函数。至少C ++标准没有说任何禁止这一点的内容。
例如
struct A
{
A( int x );
int x;
};
A a1; // error: there is no default constructor
A::A( int x = 0 ) : x( x ) {}
A a2; // well-formed there is a default constructor.
答案 1 :(得分:6)
这两个构造函数都不是默认构造函数。
默认构造函数是您可以在没有参数的情况下调用的构造函数 - 因为
示例中的两个构造函数都要求将参数传递给它们,因此它们都不是默认参数。
答案 2 :(得分:3)
默认构造函数是一个构造函数,它既没有参数,也没有参数,但它们都提供了默认值。在你的情况下,如果你的两个构造函数都具有默认值的所有参数,那么就像
这样的调用Person p;
会含糊不清。想一想:要叫哪一个?
答案 3 :(得分:2)
默认构造函数是一个没有参数的构造函数,或者如果它有参数,则所有参数都有默认值。因此,这些中的任何一个都不能作为默认构造函数。
答案 4 :(得分:0)
只有当调用语句的签名匹配时,两个构造函数才会匹配。默认构造函数始终是不带参数的构造函数
Person(){}
答案 5 :(得分:0)
如果你问哪个可以打电话;这取决于你如何创建对象。
例如;
1 - 首先叫做
Person person = new Person("a","b","c");
2 - 秒称为
Person person = new Person("a","b","c","d");