簡體   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