C 建構函式問題?

時間 2021-05-10 02:32:27

1樓:寫程式碼的冰冰

c++是一種強型別的語言,任何變數,函式,類在使用之前,需要先宣告。

編譯器根據宣告生成函式簽名,此簽名相當於乙個ID,根據各編譯器的具體實現,在生成簽名的時候只考慮類名,函式名,引數型別及數量,因此,此處的變數名可以省略。

2樓:再努力一點點

這是型別轉換建構函式:建立A型別的物件時,如果接受乙個B型別的物件,則以該物件的資料成員進行構造。

不過你需要先完成型別B的定義,僅有宣告是不可以的

3樓:蕭涵

這裡的建構函式只是宣告,不是定義,類名B是引數型別,跟int、double一樣,不是引數名稱 。

函式宣告提供函式簽名,用於呼叫時的函式匹配,以分號結尾,沒有函式體。函式簽名與函式名、引數型別、引數順序有關,與引數名無關。所以函式宣告中的引數可以不具名,因為變數名不是函式簽名的一部分。

下面這兩個函式宣告是等價的

int func(int , float &, char *);

int func(int a, float &b, char *c);

函式定義提供函式的具體行為,行為在大括號內,稱為函式體。在函式體內會有對傳入引數的操作。因此引數必須具名,引數型別和順序必須完全一致,但是函式宣告和函式定義的引數名可以不一樣。

這是與上面宣告對應的函式定義

int func(int a, float &b, char *ca;

--b;

*c = "c";

return a;

}有時候會把函式的宣告和定義結合在一起,即定義宣告,參見定義,這類函式必須在呼叫前定義。常見與檔案作用域的靜態函式或輔助函式等等。

函式可以多次宣告,但只能定義一次,內聯函式由編譯器保證不會出現multiple definitionc錯誤

4樓:

這個叫做前置宣告,A構造的時候可以接受乙個B型別的物件,物件的名稱被省略了。

因為它僅僅是宣告,你需要在下面或者cpp檔案中實現這個建構函式。因為整個過程你沒有呼叫到B類裡面的物件,所以只要簡簡單單在上面struct B就可以了。如果你需要呼叫B裡面的成員,就需要引用B所在的標頭檔案。

5樓:XZiar

這只是宣告,並沒有這個函式的具體實現。

函式宣告裡形參的名字和實現裡可以不同---應該說宣告裡的形參名字其實沒什麼作用,所以直接省略不寫也可以。

傳是肯定只能傳乙個物件的,不能傳乙個「類」的,只不過宣告裡只要知道是什麼類的物件就行了,不需要考慮給這個物件起什麼名字

C 的預設建構函式,複製建構函式 有無 const ,成員型別變成 no class type ?

叛逆者 既然你要的是拷貝構造,為什麼不就好好的按照拷貝構造的規範來,引數老老實實用const T 而要T Detail 這種臨時物件,你難道想改不成。std string型別的引數,要const 或者 從初學就該養成這樣的好習慣。operator 的引數也要是const。也是從初學就該養成這樣的好習...

c 類的建構函式初始化問題??

Right If you don t specify any constructors,the compiler will write one for you that doesn t take any arguments.This compiler generated default constr...

c 關於複製建構函式的使用?

首先前兩次是因為 Line line myp1,myp2 這個建構函式是這樣的 Line Line Point xp1,Point xp2 p1 xp1 p2 xp2 可以看出是把物件按值傳入,所以編譯器可能會完成下面的操作 Point temp1 xp1 Point temp2 xp2 呼叫構造拷...