c 中如果定義了帶引數的建構函式,那麼在定義物件時,必須初始化嗎

2021-05-14 08:16:18 字數 1336 閱讀 3928

1樓:匿名使用者

是這樣的。

你定義了建構函式,系統就不會用預設的建構函式了。

**中你定義了自己的帶參建構函式,所以系統的預設建構函式就在編譯時,不會生成了。

這個就需要自己定義了。

否則的話,date a;這樣使用的時候就會報錯。

2樓:兔子和小強

定義物件的時候它會呼叫相應的建構函式初始化自己。如果沒有引數就呼叫不帶引數的建構函式。

3樓:匿名使用者

如果一個類定義中沒有建構函式,那麼編譯器會自動給這個類新增一個空參的建構函式,函式體是什麼也不做。如果你給一個類實現了建構函式,它們編譯器就不再會這個類自動新增空參的建構函式了。這時候,如果你沒有提供空參構造,這意味著這個類將不允許空參構造。

這也就是你在編譯時遇到的現象。如果你希望使用空參構造和帶參構造兩種構造方式並存,你就需要分別實現兩個建構函式,或者實現一個帶預設引數的含參構造。

4樓:開心果

當你自己定義一個建構函式的時候,編譯器就不再生成預設建構函式了,除非你自己顯式的定義,所以你如果定義了有引數的建構函式,然後卻想無引數初始化,編譯器會報錯的

簡單來說,你要麼不寫建構函式,用成員函式賦值,要麼就把有引數無引數的建構函式都顯式的定義清楚,

5樓:

這個例子中有兩個建構函式,分別是含參和不含參的。那麼在定義物件的時候不初始化也不會報錯吧。

6樓:匿名使用者

你的問題解決了,不過大家的回答還是有點問題的,都說不定義建構函式,編譯器會自動生成一個無引數的建構函式,其實這個是不對的,只是在有些情況下才會生成。具體大家可以上網找找資料看下。http:

c++類中的類成員變數怎麼呼叫帶引數的建構函式來初始化?

7樓:匿名使用者

要呼叫帶參的構造抄函式,必襲須這樣

做:#include "stdafx.h"

class a

;a(int a);

int ax;

};class b

b() : bx(0) //這樣也行du/*****************/

void print()

/*************************/a bx; //這樣宣告

/**************************/};int main(int argc, char* argv)

c 中,如果建構函式沒有預設值,物件也沒有引數賦值過去,那

不會的。c 類的建構函式詳解 一 建構函式是幹什麼的 class counter private 資料成員 int m value 該類物件被建立時,編譯系統物件分配記憶體空間,並自動呼叫該建構函式 由建構函式完成成員的初始化工作 eg counter c1 編譯系統為物件c1的每個資料成員 m v...

C中的什麼代替了C語言中的帶引數巨集定義?謝謝

模板inline函式 都不算是巨集定義 都不能算完全代替巨集 比如inline 函式是否被直接替換 還是作為普通函式 編譯器會自己判斷的 而巨集是無條件替換 模板看起來像巨集,但實際上它一般不會被帶入到函式中即編譯的時候 大多數時候都是有自己的符號的 教科書的話 答案就是行內函數了 這個是唯一一個c...

c 類中的建構函式 point int x,int y x x ,y y其中x和y已被宣告

建構函式的引數不要和類成員一樣。起碼寫成point int x t,int y y x x t y y t 這段 的意思是初始化x x,y y c 中point int x,int y x x y y 是什麼意思 建構函式冒號後頭那個叫初始化列表,用於初始化類的成員屬性,這裡相當於內 point i...