使用預設建構函式出錯 c

2025-01-08 22:55:27 字數 2926 閱讀 6721

1樓:網友

a(int a=2,int b=1):x(a),y(b)關鍵是這句,你設定了預設的引數,當a b;時,a()a(int a=2,int b=1):x(a),y(b)這兩句都符合,那麼編譯器就會報錯了。

把預設的引數去掉。

#include

using namespace std;

class a

int x,y;

public:

a() a(int a,int b):x(a),y(b)a(a& a):x(,y(

a() void disp()

int main()

a b;//報錯,貌似不能分辨用哪個建構函式,正確的雜寫?

a c(2,3);

a d(c);;

system("pause");

return 0;

2樓:網友

你的第二個建構函式中已經設定了預設引數a(int a=2,int b=1):x(a),y(b) ;所以在你定義的a b時系統不知道呼叫哪個建構函式因為本應該呼叫第乙個建構函式的 但是由於第二個建構函式你設定了預設引數 呼叫起來也沒有錯 所以解決辦法有兩個:一是你去掉第乙個建構函式,二是你將第二個建構函式的預設引數去掉。

class a

int x,y;

public:

a()a(int a,int b):x(a),y(b)a(a& a):x(,y(

a() void disp()

或者。class a

int x,y;

public:

a(int a=2,int b=1):x(a),y(b)a(a& a):x(,y(

a() void disp()

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

3樓:4終

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

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

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

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

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

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

4樓:血色鋒芒

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

5樓:二天有

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

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

6樓:網友

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

7樓:網友

point(int x,int y)

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

point(){

8樓:相思丶貓

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

9樓:網友

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

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

10樓:周生

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

c++,當建構函式失敗時,建構函式內部怎麼處理?

11樓:酒光磨本

你沒有明確什麼叫「建構函式失敗」。我的理解是:建構函式中某乙個執行過程沒有得到你期望的結果。

如果我的理解是你想表達的,那麼建構函式內部的處理是這樣:

1.建構函式想通知外部自己構造失敗,只有拋異常這乙個途徑(沒有返回值);

2.如果你不拋異常,那麼建構函式執行完畢,從語言層面上編譯器認為該物件是正確構造了的,只有你知道其實構造沒有按預想的進行,所以你需要用狀態變數、建構函式引用引數或什麼其他玩意兒讓外界可以知道構造失敗了。

3.如果你拋異常標識構造失敗,那麼,所有已經構造好的基類物件和資料成員會按照構造逆序逐個進行析構(基礎資料型別除外,因為它們析構就是什麼都不做)。這裡有一點要注意,如果發生了動態記憶體分配,那需要在拋異常前手動釋放記憶體,否則會有記憶體洩漏。

c++類中建構函式的使用出錯

12樓:暗送秋浡

第一種,是呼叫帶引數的建構函式,顯而易見,你定義的是乙個帶三個引數的建構函式,沒問題,ok。

第二種,是呼叫的是不帶引數的建構函式,不定義的話,編譯器會預設乙個,沒問題,ok。

第三種,呼叫的是複製建構函式,沒定義的話,編譯系統也會自動提供乙個預設的複製建構函式,但只是簡單地複製類中每個資料成員,定義的話,就會呼叫是你自己的。

第四種,這種定義類物件,是錯誤的語法,只有在呼叫帶引數的建構函式建立物件時,才會用括號()把引數傳進去,如果想呼叫無引數的建構函式建立物件,是不能帶括號的,所以編譯器會報錯。

C 圓類,要求定義建構函式(以半徑為引數,預設值為0,周長和麵積在建構函式中生成)和複製建構函式

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

描述建構函式如何在繼承中使用,關於C 中建構函式的繼承的問題。

繼承技術是物件導向程式設計的主要特徵。物件導向程式語言引入繼承機制,可以實現 重用,提高程式設計效率。c 只支援單繼承,即一個派生類只能有一個基類。類的繼承性是指一個類定義既可以具有其他類的資料成員 屬性成員 方法成員等,也可以使其他類具有自己的資料成員 屬性成員 方法成員等。在類的繼承中,被繼承的...

c裡建構函式怎麼寫,C 建構函式的引數是陣列的話要怎麼寫

public class myclass public myclass int age 這是一個帶引數的建構函式 private int age 建構函式的作用 簡單地說就是初始化一類的物件例項以及其各自段的值.c 建構函式是在建立給定型別的物件時執行的類方法。建構函式具有與類相同的名稱,它通常初始...