当构造函数的输入参数设置为等于 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);
那么这里只是参数名用大写字母键入。如果没有参数,则不能调用此构造函数。尽管您可以进一步将其定义为具有默认参数。成员函数的默认参数可以在其声明或/及其定义中指定。
首先让我们记住什么是构造函数:
构造函数是一个成员函数,用于启动class的实例。
这是什么意思?这意味着每次你创建一个 class 的实例(一个 class 的对象或者你更喜欢如何称呼它),你首先必须准备好实例。构造函数准备该实例,以便可以正确使用它。即使您没有在代码中放置构造函数,它也会被使用 "secretly"(好吧,这真的不是什么大秘密)。
现在,假设您创建了一个 class,并且您在 class 中声明了一些变量。例如,如果您想创建 class 的实例,同时使用 class 中默认未定义的变量,您将使用构造函数来更改它们。如果你不改变它们,程序 "secretly" 会使用一个空的构造函数来告诉你的程序 "I don't want any changes made".
因此,回答您为什么不能执行以下操作的问题:
SampleConstructor(int INVALID_NODE_ID);
什么是INVALID_NOD_ID?它可能是 15 之类的数字。您会在代码中编写以下内容吗?:
整数 15;
不,因为 15 不是变量。您必须将变量传递给构造函数,然后才能适当地使用该变量而不是默认值。
如果 INVALID_NODE_ID 是通过以下方式启动的,情况也是如此:
整数 INVALID_NODE_ID = 15;
通过在构造函数中写入 int INVALID_NODE_ID ,您将重新声明变量。
希望对兄弟有帮助
例如,这是在头文件中找到的:
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);
那么这里只是参数名用大写字母键入。如果没有参数,则不能调用此构造函数。尽管您可以进一步将其定义为具有默认参数。成员函数的默认参数可以在其声明或/及其定义中指定。
首先让我们记住什么是构造函数:
构造函数是一个成员函数,用于启动class的实例。
这是什么意思?这意味着每次你创建一个 class 的实例(一个 class 的对象或者你更喜欢如何称呼它),你首先必须准备好实例。构造函数准备该实例,以便可以正确使用它。即使您没有在代码中放置构造函数,它也会被使用 "secretly"(好吧,这真的不是什么大秘密)。
现在,假设您创建了一个 class,并且您在 class 中声明了一些变量。例如,如果您想创建 class 的实例,同时使用 class 中默认未定义的变量,您将使用构造函数来更改它们。如果你不改变它们,程序 "secretly" 会使用一个空的构造函数来告诉你的程序 "I don't want any changes made".
因此,回答您为什么不能执行以下操作的问题:
SampleConstructor(int INVALID_NODE_ID);
什么是INVALID_NOD_ID?它可能是 15 之类的数字。您会在代码中编写以下内容吗?:
整数 15;
不,因为 15 不是变量。您必须将变量传递给构造函数,然后才能适当地使用该变量而不是默认值。
如果 INVALID_NODE_ID 是通过以下方式启动的,情况也是如此: 整数 INVALID_NODE_ID = 15; 通过在构造函数中写入 int INVALID_NODE_ID ,您将重新声明变量。
希望对兄弟有帮助