C 中的建構函式問題,c 建構函式的問題

時間 2022-07-23 13:15:15

1樓:匿名使用者

建構函式一般用來對類中的資料成員進行初始化工作,但並不是要對全部資料初始化,你只需要選擇自己需要的資料進行賦值即可。其實這一點從預設的建構函式也能看出來:當你沒有顯示的寫乙個建構函式的時候,編譯器會為你提供乙個預設的建構函式,它沒有引數,只有乙個空語句,也就是說它沒有對任何資料成員進行初始化。

由於構造子類時需要呼叫父類的建構函式,因此,子類的建構函式的引數列表中要為父類提供引數,就像你寫的這一句**:

tbox(int a1,int b1, int a2,int b2):tpoint(a1,b1),tline(a2,b2);

引數a1,b1以及a2,b2是為兩個父類的建構函式提供引數。

2樓:匿名使用者

不一定要給所有成員賦初值

3樓:井鈺

你好好看書把

tbox(int a1,int b1, int a2,int b2)是派生類的建構函式

後面的兩個分別是基類的建構函式的初始化列表具體你要仔細看書,這些書上都講的很詳細的

c++建構函式的問題

4樓:匿名使用者

a a()是宣告了乙個名字叫a的返回型別為a的方法,跟你的類a沒什麼太大關係,自然不會呼叫a的建構函式。比如說下面這段**會輸出ok

class a

};int main()

a a()

5樓:

呼叫無參的建構函式不能新增(),如a a,這是正確的格式

呼叫有參的建構函式用到(),在()中新增形參,如 int i=0;int j=5; a a( i, j)

6樓:匿名使用者

a a();

這是在宣告乙個函式。函式名叫a,不需要引數,返回型別為a。當然既不報錯,也無輸出。

關於c++中建構函式的問題

7樓:匿名使用者

涉及到函式的多型,同名的函式是不能用返回值區分的(和這裡沒關係,建構函式沒有返回值),是通過引數個數或者引數型別區分的。一旦給某個引數設定了預設值,就會認為沒有這個引數,也就無法區分了。例如:

point(int x)和point(int x,int y=2)計算機是無法區分的。

8樓:你妹

定義兩個一樣的類,你不是自找麻煩嗎?main函式不能有兩個一樣的類存在,它只會認乙個.就像區域性變數和全域性變數.類的方法的重寫重構同個道理.只認乙個.

c++ 建構函式問題

9樓:憤怒de翔小果

因為編譯器不知道該呼叫哪乙個建構函式。可以將宣告complex(double a=0, double c=0);

改為complex(double a, double c);試試。

c++建構函式問題

10樓:淘汰之刃

1全部r(r a)這個不是一般的建構函式,是拷貝建構函式,是一種特殊的建構函式,它由編譯器呼叫來完成一些基於同一類的其他物件的構建及初始化。其唯一的引數(物件的引用)是不可變的(const型別),所以要將引數改稱常引用,即r(const r& a);

其中的原因可以這樣理解:若是按照你的那個原形進行構造的話,由於是值傳遞,所以在函式體的內部要先構造乙個物件,可是構造乙個新的物件又要呼叫r(r a)這個建構函式,然後這個函式又是值傳遞,又要構造新的,又呼叫.....這樣就陷入了死迴圈。

而傳遞引用,由於不用構造新的物件,就可以避免這樣的錯誤。

回答摟主:估計系統雖然知道你自己寫的拷貝建構函式有錯誤,不過在這裡用物件構造自己的本類物件時,他僅僅知道自己將要呼叫的是拷貝建構函式,而且這個函式現在已經存在了。這樣他就不會抱錯了,也許他不管這個拷貝建構函式寫的是否正確。

這就像你自己寫了乙個普通的函式,而且寫錯了,不過你在主函式中呼叫這個函式(格式正確)時是不會報錯的。具體的錯誤會在執行時顯示出來。

而給拷貝建構函式抱錯是因為這類函式比較特殊,有固定的格式,系統一檢查與格式不符合,就知道錯了。

11樓:兜裡有兩塊糖

r(r a);改為r(r &a);

就可以了

關於c++中類的建構函式的問題

12樓:匿名使用者

照你的程式模擬了乙個,是可以通過編譯的(vs2008+sp1)#include

using std::cout;

using std::endl;

class josephus

;josephus::josephus(int size);josephus::josephus(int size)data = new int[size];

}int main()

13樓:危獻

檢視類宣告檔案 有沒有寫返回值字首

檢視類宣告檔案 類宣告有沒有分號結尾

檢視本檔案 前面是否有返回值字首

檢視本檔案 是否有未閉合的大括號

可能性依次遞減

14樓:匿名使用者

定義完類一定要加分號 ;

不是編譯器不同不用加 是c++語法規定一定要加。。

任何編譯器都不能違背c++語法。。

書本沒寫,可能是作為乙個單獨類給例子,具體例子**肯定會有分號

15樓:匿名使用者

肯定是在類的建構函式宣告的時候給加了返回值,建構函式不能有返回值的。

c中子類建構函式中如何呼叫父類建構函式

四捨 入 class a class b a 子類的子類呼叫父類中的隱藏成員 一般情況,在呼叫父類成員時子2代和子1代沒什麼區別。但如果子1代隱藏父類成員,情況就會不同。像上面的情況,son隱藏了父類的成員變數name和成員方法tellname 如果再有乙個類grandson繼承son,那grand...

關於C 子類建構函式的過載問題

因為你的基類student裡定義了建構函式,基類的預設建構函式不能呼叫。繼承類裡也就不可能使用預設建構函式了。把你基類裡的建構函式改為有預設值的建構函式,就能解決你的問題。如下 include stdafx.h include include using namespace std class st...

c 中的析構函式與建構函式的區別

c 中的析構函式與建構函式的區別主要是功能上的區別 建構函式 是一種特殊的方法。主要用來在建立物件時初始化物件,即為物件成員變數賦初始值,總與new運算子一起使用在建立物件的語句中。特別的乙個類可以有多個建構函式 可根據其引數個數的不同或引數型別的不同來區分它們 即建構函式的過載。析構函式 dest...