C 編譯時如何根據是否存在無參建構函式決定是否呼叫該建構函式 30

2025-03-13 03:50:19 字數 2361 閱讀 8356

c++ 編譯時如何根據是否存在無參建構函式決定是否呼叫該建構函式

1樓:幻夢·人生

根據你建立物件的方式,決定呼叫建構函式的型別。

例如base a(10) base a

前者呼叫有乙個引數的建構函式,後者呼叫無引數的建構函式。

在類的宣告中如果你沒有寫建構函式,編譯器會為你提供乙個無引數的預設建構函式。

如果你宣告瞭建構函式,編譯器就不會給你提供無引數的建構函式。

例如。class base

前者會預設生成乙個base(){的建構函式、後者則不會。

如果你用後者去宣告乙個物件。

那麼你就必須為這個物件提供引數。

如果你使用base a;宣告物件,就會報錯。

因為編譯器沒有給提供無引數的建構函式。

希望我的解答能夠幫助到你,如滿意,

2樓:網友

根據是否存在無參建構函式?預設的就是它,怎麼會不存在啊。自己寫的只是過載而已。

具體呼叫哪個建構函式是取決於你初始化物件的建構函式的引數來定的,沒引數就用無參,有引數就呼叫相應引數型別的建構函式,引數對不上號的話就報錯。

3樓:

如果你能夠修改ctest,永遠提供預設建構函式,不就行了?

如果不能,則基本無解。我的意思是,如果構造需要提供引數,可沒有什麼通用的方法可以猜出這個類的構造需要什麼引數。

c++:不存在預設建構函式?

4樓:4終

c++:不存在預設建構函式,是**錯誤造成的,解決方法如下:

1、首先在c語言中,物件複製時,只對物件中的資料成員進行簡單的賦值,如下圖所示。

2、若類中沒有拷貝建構函式,編譯器會自動產生乙個預設拷貝建構函式,類似如下圖。

3、若物件中有動態成員,需要重新分配空間賦值。如下圖所示。

4、宣告乙個私有拷貝建構函式可以防止預設拷貝動作發生,如下圖所示。

5、最後這個宣告乙個私有拷貝建構函式可以防止預設拷貝動作發生完成後,如下圖所示就可以了。

5樓:血色鋒芒

point類中你定義了建構函式 point(int x,int y),這樣系統就不會再提供預設的建構函式point(){而沒有了point(){這個建構函式,dis類中的建構函式dis(point a,point b)中,引數a和b的構造自然會失敗(類中沒有對應的無參建構函式)。

6樓:二天有

是因為你定義point的構造時沒有定義預設建構函式,所以,如果你一定要用point(int x,int y)

那麼可以改成這樣point( int x = 0, int y = 0),這樣定義後,你的a= a ;就不會報錯了。最好在point建構函式後加一下point operator = const point & p ),這樣就用擔心呼叫拷貝物件時出錯了。c++ 語法是這樣說的,如果沒有定義建構函式,編譯器會提供預設構造,但是,如果自己定義了建構函式,編譯系統將不在為該類提供預設建構函式。

7樓:網友

dis() 的建構函式一定有的。這個建構函式不存在預設,但是存在預設其他建構函式。

8樓:網友

point(int x,int y)

改成。point(int x = 0,int y = 0)或者在這前面新增一句。

point(){

9樓:相思丶貓

如果你提供了乙個帶引數的建構函式,那麼編譯器不負責提供預設(就是無參)的建構函式。

10樓:網友

你已經定義了乙個帶引數的建構函式point(int x,int y)系統就不會在提供預設建構函式了。你可以參考。

希望對你有幫助,祝你好運,

11樓:周生

point要提供乙個複製建構函式,在dis中初始化要採用初始化表的方式。

c++中不帶引數的建構函式和帶引數的建構函式可以同時出現嗎?

12樓:麴淑英熊風

c++中不帶引數的建構函式和帶引數的建構函式是可以同時出現的。

理由如下:中發明了一種函式過載技術,也就是允許多個函式名相同,但是引數的個數或者型別不一樣。

類的建構函式是允許過載的,帶引數的建構函式和不帶引數的建構函式滿足了函式過載的需求。

3.但是在乙個類產生乙個物件的時候,只會選做其中乙個建構函式。

13樓:湛仁閆水

建構函式是可以過載的,解構函式不可以,一般程式中,除去不帶引數的,一般都會自定義複製建構函式或者帶別的引數的建構函式,功能都是一樣的,完成物件初始化。

c程式編譯時提示錯誤,c程式編譯時。提示錯誤missingfunctionheader。請問是什麼意思。

include int add int x,int y 分號去掉int main int a,b c的宣告可以不要 cin a cin b 下面的意思應該是輸出a b的值,你又沒給ab賦值,直接輸出 cout a b的值為 cout 應該是這樣,可以按具體情況修改 include iostream ...

c語言編譯時出現expectedbefore prin

該錯誤是語法錯誤,意思是printf語句之前的那條語句後面沒加分號。c語言中規定每條語句以分號 作為結束標誌。如果沒加分號,程式在編譯的時候就會出錯。舉例如下 include void main 以上程式編譯的時候就會報錯,因為int a 4後面沒加分號,就會提示expected before pr...

微軟vs2019如何用來編譯c語言

如何使用visual studio 2010 vs2010 編譯c語言 1.開啟vs2010主介面,然後選擇,檔案 新建 專案,在專案型別中選擇vc win32 然後在右側模板中選擇win32控制台應用程式,再在下面輸入乙個名稱 專案名稱,不用帶.c 選擇儲存位置後確定,彈出個對話方塊,不管它,下一...