当构造函数的输入参数设置为等于C ++中的值时,这意味着什么?

时间:2015-01-08 15:28:51

标签: c++ constructor arguments

例如,这可以在头文件中找到:

SampleConstructor(int hardwareID = INVALID_NODE_ID);

为什么我们不能这样做:

SampleConstructor(int INVALID_NODE_ID);

2 个答案:

答案 0 :(得分:4)

它被称为default argument。 这意味着您可以在不指定任何参数的情况下调用该函数,编译器将使用此默认参数。

在您展示的示例中,INVALID_NODE_ID是一些可以转换为int类型的命名值(或表达式)。

考虑例如

#include <iostream>

const int DEFAULT_ARGUMENT = 10;

void f( int x = DEFAULT_ARGUMENT ) { std::cout << "x = " << x << std::endl; }

int main()
{
    f( 20 ); // outputs 20
    f();     // outputs 10 though argument is not explicitly specified
}

相对于构造函数,这意味着可以在没有参数的情况下调用构造函数。这样的构造函数称为默认构造函数

至于此声明

SampleConstructor(int INVALID_NODE_ID);

然后这里只是用大写字母键入参数名称。如果没有参数,则不能调用此构造函数。虽然您可以进一步将其定义为具有默认参数。成员函数的默认参数可以在其声明或/及其定义中指定。

答案 1 :(得分:0)

首先让我们记住构造函数是什么:

构造函数是一个成员函数,用于启动类的实例。

这是什么意思?这意味着每次创建类的实例(类的对象或者您更喜欢调用它)时,首先必须准备好实例。构造函数准备该实例以便可以正确使用它。即使你没有在你的代码中加入构造函数,也会秘密地&#34;用过(好吧,它真的没什么大秘密)。

现在,假设您创建了一个类,并且您在该类中声明了一些变量。例如,如果您希望在使用类中未默认定义的变量时创建该类的实例,则可以使用构造函数来更改它们。如果你不改变它们,程序就会秘密地&#34;使用空的构造函数来告诉你的程序&#34;我不想做任何改变&#34;。

因此,要回答您的问题,为什么您无法执行以下操作:

SampleConstructor(int INVALID_NODE_ID);

什么是INVALID_NOD_ID?它可能是15或类似的数字。你会在你的代码中写下以下内容吗?:

int 15;

不,因为15不是变量。您必须将变量传递给构造函数,然后适当地使用该变量而不是默认值。

如果以下列方式启动INVALID_NODE_ID,情况也是如此: int INVALID_NODE_ID = 15; 通过在构造函数中写入int INVALID_NODE_ID,您将重新声明该变量。

希望帮助兄弟。