两个构造函数,默认情况下?

时间:2014-03-10 13:23:51

标签: c++ class constructor

好的,我的作业非常简单。

我为Person类提供了这两个构造函数:

Person( const string &, const string &, const string & );
Person( const string &, const string &, const string &,
const string & );

我有4个默认值

其中哪些将成为默认构造函数?它总是最有争议的一个或它是如何工作的?

6 个答案:

答案 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");