繁体   English   中英

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

[英]What does it mean when an input argument to a constructor is set equal to a value in C++?

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

SampleConstructor(int hardwareID = INVALID_NODE_ID);

我们为什么不能这样做:

SampleConstructor(int INVALID_NODE_ID);

它称为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);

那么这里只是简单地用大写字母键入参数名称。 没有参数就不能调用此构造函数。 尽管更进一步,您可以将其定义为具有默认参数。 成员函数的默认参数可以在其声明中指定,也可以在其定义中指定。

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

构造函数是一个成员函数,用于初始化类的实例。

这意味着什么? 这意味着每次创建一个类的实例(一个类的对象,或者您更喜欢调用它)时,首先必须准备好该实例。 构造函数准备该实例,以便可以正确使用它。 即使您没有在代码中放入构造函数,也将“秘密地”使用它(实际上这并不是什么大秘密)。

现在,假设您创建了一个类,并且在该类中声明了一些变量。 例如,如果您想使用该类中默认未定义的变量来创建该类的实例,则可以使用构造函数来更改它们。 如果不进行更改,则该程序“秘密地”使用一个空的构造函数来告诉您的程序“我不要进行任何更改”。

因此,为回答您的问题,为什么您不能执行以下操作:

SampleConstructor(int INVALID_NODE_ID);

什么是INVALID_NOD_ID? 可能是15之类的数字。 您是否会在代码中编写以下内容?:

诠释15;

不,因为15不是变量。 您必须将一个变量传递给构造函数,然后才能正确使用该变量而不是默认值。

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

希望这对兄弟有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM