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...