1樓:網友
肯定是你在派生類直接建立了基類物件,而不是通過基類過載建構函式建立物件,那樣的話,建立的時候不能呼叫過載的建構函式,所以會出錯,我遇到過的情況是這樣,當時也找了好久沒發現,你再仔細檢查一下你的**吧,或者就貼出來,大家一起看吧。
2樓:花香人間
不會吧,應該是你在基類裡定義了別的建構函式,將系統預設的無參建構函式遮蔽了,然後你在派生類時,沒有在派生類的建構函式成員初始化表裡初始化基類建構函式吧。
3樓:
我印象中每個類都需要有 constructor 和 destructor.
constructor 可以有多個,但必須有乙個預設的與類同名的無參constructor,儘管它什麼都不做。
當你宣告乙個類的物件,程式就要呼叫constructor做初始化,「空」也算做了。
4樓:研究報告站
肯定是你寫錯了,c++沒有這樣的規定的。
把**貼出來!!!
5樓:網友
不寫的話就是有預設的,但是,如果你含有const變數,引用變數,指標變數的話必須有建構函式對其進行初始化,我懷疑你就是這個問題,是不是有類似的成員變數?
6樓:
把**貼出來,這樣更清楚些。
在c++中建構函式的有參和無參的區別
7樓:匿名使用者
也沒多大區別,有參的可以定義的時候傳遞引數,無參的可以定義變數為預設值,或者輸入引數。兩者都可以實現相同的功能,一般有參的方便一點,定義的時候就可以賦初值。也可以兩個同時用,實現多型性。
8樓:網友
都在物件被構造的時候被呼叫,只是在構造物件時根據new物件的引數型別和個數進行選擇對應的構造方法進行呼叫,當沒有引數時呼叫無參構造方法,有引數時呼叫對應的有參構造方法。建構函式的引數一般用來初始化類的資料成員。
建構函式的特點及作用:
1、建構函式的命名必須和類名完全相同。
2、建構函式的功能主要用於在類的物件建立時定義初始化的狀態。它沒有返回值,也不能用void來修飾。
3、建構函式不能被直接呼叫,必須通過new運算子在建立物件時才會自動呼叫。
4、當定義乙個類定義的時候,通常情況下都會預設乙個建構函式,此預設建構函式是不帶引數的。當自定義了含參建構函式時,預設建構函式將需要手動書寫出來。
9樓:網友
比如 class a
無參建構函式。
a(int a) //有參建構函式。
int main()
10樓:測繪地理資訊
這可是乙個字乙個敲的啊……
在定義類時不能對成員變數進行初始化,因為此時無法確定成員變數屬於哪乙個物件,成員變數一般都定義為私有屬性,也不能在宣告物件後利用賦值運算對成員變數進行初始化。成員變數的初始化一般是利用乙個名為建構函式的成員函式來完成。
建構函式是一種特殊的成員函式,它提供了對成員變數進行初始化的方法,使得在宣告物件時能自動地初始化物件。因為當程式建立乙個物件時,系統會自動呼叫該物件所屬類的建構函式。
像一般函式一樣,建構函式也可以過載,即可以為乙個類定義多個不同的建構函式,通過函式引數不同來區別不同的建構函式,在宣告物件時其後括號中的引數形式決定了呼叫類的哪乙個建構函式。
c無參的建構函式問題,C 中無參建構函式的使用問題
vs 2005要求必須要有建構函式,這是一定的不過如果有帶參建構函式,就可以不要無引數的建構函式。至於當類中有帶引數的建構函式時,vs 2005要求有一個無參的建構函式。這只是一種建議。就像你說的,他是為了防範出錯,屬於比較保守的安全程式設計,類似於斷言程式設計一類的規定 就好比說,有一個電器他規定...
c中建構函式與解構函式的問題,C 中建構函式與解構函式的問題
你的getname函式在 你的類定義中只有getscore和getid c 關於建構函式和解構函式呼叫次數的問題 沒問題啊。引數傳遞的時候第一次拷貝構造呼叫,在函式返回的時候賦值給c2 再次呼叫了拷貝構造。析構的話 c1 c2 c 三次 傳遞引數和返回引數各一次拷貝建構函式,所以是2次 有兩個物件c...
C中如何繼承帶有引數的建構函式,請教c 有參建構函式繼承的問題
返回型別一致,引數型別一致,直接呼叫就可以 請教c 有參建構函式繼承的問題 老游擊隊員 注意看父類a的構造方法是帶一個引數的int型所以你baes no 的時候會根據你no的型別選擇父類的建構函式,如果沒有找到匹配型別就報錯,例如 你base s s是string型別,而父類裡面又沒有傳string...