-
建構函式的引數不能全部具有預設引數。
無論類如何,都有乙個沒有引數的預設建構函式,無論您是否顯示它。
例如,如果宣告此類,則僅宣告具有三個引數的建構函式。
rectangle(unsigned len,unsigned ht,unsigned wd);
但實際上它也有乙個隱式的預設 rectangle(); 這種沒有引數的預設建構函式。
當然,您可以顯示預設宣告,例如 rectangle(); 好吧,也是。
因此,在本例中,您在 main 函式中宣告此行 rectangle rectangle(); 我不知道它是否被叫。
rectangle();或預設引數稱為 rectangle(unsigned len, unsigned ht, unsigned wd);
導致了不確定性。
另乙個問題是,引數的預設值只能在函式宣告時新增,而不能在函式實現時新增。 所以你錯了。
-
person(const string& nam="",const string& add=""):name(nam),address(add){}//---1]
person():name(""),address(""){}//---2]
從功能上講,刪除預設引數 [1] 或捨入 [2] 沒有區別。
在效率方面,刪除 [1] 的預設引數比丟棄 [2] 更好,因為呼叫 new person() 時對 [2] 的呼叫顯然比呼叫 [1] 時更快。
建議刪除預設引數。
-
預設建構函式是系統給出的建構函式,如果未提供任何建構函式,則不帶引數和函式。
在建立物件時呼叫建構函式,並且建構函式初始化成員變數。 可以有多個建構函式,它們之間的區別在於引數不同。 所有人都可以使用不同的建構函式初始化物件。
預設建構函式是在呼叫建構函式時不需要為建構函式提供引數的建構函式。
在類中定義了所有預設引數的建構函式後,就不能再定義過載建構函式。 例:
box(int =10,int =10,int =10); 1
box();2
box(int,int); 3
如果有以下定義:
box box1;無論是呼叫上面第乙個預設引數的建構函式,還是呼叫第二個預設建構函式。
box box2(15,30);無論是呼叫上面第乙個預設引數的建構函式,還是第三個建構函式。
-
例如,如果你定義了乙個類 A 類,並且其中沒有寫入構造,那麼系統 DAO 會自動為你生成乙個預設的建構函式容量。
函式是 a(),預設建構函式沒有引數,因此它也是乙個無引數建構函式。
無引數建構函式意味著函式沒有引數,說白了,函式的括號裡什麼都沒有。 例如,a()。
具有預設值的建構函式是具有引數的建構函式,但如果在不傳入任何引數的情況下呼叫它,則使用預設值。
a(int i = 0)
如果在 main 函式中呼叫 a(),則輸出預設值 0,如果呼叫 a(2),則輸出傳入的值,即 2
-
預設建構函式為:bai如果不提供任何建構函式 zhi,系統將給出 dao
乙個沒有引數和沒有函式返回的構造和答案函式;
如果類的宣告中沒有建構函式,系統會自動為該類提供預設建構函式。 如果在類中宣告了建構函式,則系統不再提供預設建構函式,如果要使用無引數建構函式,則需要自己過載建構函式。
-
如果存在自定義建構函式,則執行自定義建構函式,而不執行預設建構函式。
-
預設構造只是由系統新增,物件以編譯器預設的方式初始化! 只要您顯示的宣告定義了乙個無引數構造,它就沒有預設值,並且系統會優先呼叫您定義的無引數構造!
-
在 C++ 中,不帶引數的建構函式和帶引數的建構函式可以同時出現。
原因如下:發明了一種函式過載技術,即多個具有相同名稱但引數數量或型別不同的函式。
類的建構函式允許過載,帶引數的建構函式和不帶引數的建構函式滿足函式過載的需要。
3.但是,當乙個類生成乙個物件時,只選擇其中乙個建構函式。
-
建構函式可以過載,析構函式不能,在一般程式中,除了沒有引數的建構函式外,建構函式或有其他引數的建構函式都會自定義,函式相同,完成物件的初始化。
-
如果不編寫建構函式,編譯器會自動生成乙個具有空函式體的預設建構函式。 但是,如果你編寫乙個帶有引數的建構函式,它不會自動生成,所以你需要自己編寫乙個無引數的建構函式。
之所以需要無引數建構函式來構建陣列,是因為在編寫陣列時只能將其寫為 circle carray[10],而不能傳遞引數進行初始化。 建立變數時,可以圈出 c(“參數列”),可以傳遞引數初始化。
預設建構函式初始化的結果是:如果資料成員是物件,則呼叫其無引數建構函式; 否則,(例如 int、float 等)它是乙個不可預測的值,即“亂碼”。
-
其實上面說的都不錯,你構建的物件陣列是什麼意思? 它不是乙個物件的陣列,它本質上是乙個陣列,陣列元素是乙個類的物件,比如 circle 類的 carray 陣列:circle carray[10]; 它意味著建立了乙個陣列,陣列元素的每個物件都是 circle 類的乙個物件,既然是構建 circle 類的物件,就必須使用類建構函式,預設建構函式,它與你構建的類有關,不是什麼都不做,而是要完成一些初始化變數。
例如,班級圈子
假設我構造了圓圈 carray[10]; 這意味著陣列中的每個物件都使用 circle() 初始化變數。
-
我想先問一下,你有沒有乙個構造引數,你的圈子類中寫了引數?
如果類中沒有建構函式,則自動生成預設的無引數建構函式。 但是對於建構函式,他們認為這就是您所需要的,並且您不需要無引數建構函式。
建構函式通常執行諸如物件初始化之類的操作。
為什麼物件陣列需要預設建構函式? 您應該將物件陣列視為如何初始化陣列中的成員。 如果類 a 有乙個建構函式 a(int,char,double),那麼我們可以定義乙個物件 a(i,c,d); 這將初始化物件 a,但無法實現物件陣列,因此需要乙個預設建構函式,沒有引數和定義。
如果不編寫建構函式,則初始化通常是亂碼。
-
這沒有太大區別,您可以在有引數時傳遞引數,在沒有引數時可以將變數定義為預設值或輸入引數。 兩者可以實現相同的功能,一般有乙個引數比較方便一點,並且初始值定義時可以分配。 它也可以同時使用,以實現多型性。
-
它們都是在構造物件時呼叫的,但是在構造物件時,根據新物件的引數型別和數量呼叫相應的建構函式,沒有引數時呼叫引數建構函式,有引數時呼叫相應的引數建構函式。 構造函式引數通常用於初始化類的資料成員。
建構函式的特點和功能:
1. 建構函式的名稱必須與類的名稱完全相同。
2.建構函式的作用主要用於定義建立類物件時的初始化狀態。 它沒有返回值,不能用 void 修飾。
3.建構函式不能直接呼叫,必須通過new運算子建立物件時自動呼叫。
4. 在定義類定義時,通常預設為乙個建構函式,而這個預設建構函式是沒有引數的。 自定義引數建構函式時,需要手動編寫預設建構函式。
-
例如,A 類
無引數建構函式。
a(int a) 有乙個引數建構函式。
int main()
-
這是乙個字乙個字......
在定義類時,不能初始化成員變數,因為無法確定成員變數屬於哪個物件,而且它通常被定義為私有屬性,並且不能在宣告物件後使用賦值操作來初始化成員變數。 成員變數的初始化通常使用稱為建構函式的成員函式完成。
建構函式是一種特殊型別的成員函式,它提供用於初始化成員變數的方法,以便在宣告物件時自動初始化物件。 這是因為當程式建立物件時,系統會自動呼叫該物件所屬類的建構函式。
與普通函式一樣,建構函式可以通過為乙個類定義多個不同的建構函式,通過不同的函式引數區分不同的建構函式,並在引數的形式確定呼叫類的建構函式後在括號中宣告物件來過載建構函式。
-
例如,在 main 函式中,您希望將 a in a=5 傳遞給子函式,而這個 a 是乙個引數。
表單引數:你傳遞的變數需要有人接收,有人想對,子函式負責接收這個 a=5,為了接收這個引數,子函式臨時在堆疊中開啟乙個空間來儲存它,這個空間只是暫時的,子函式結束後,就會被釋放, 所以不管你在子函式中怎麼樣,你怎麼改變傳進來的引數的值,但是引數的值不變,為什麼呢?原因很簡單,就是因為這兩者的儲存位置不在同乙個地方,而且值是一樣的,所以常被稱為“值呼叫”; 另一方面,還有一種傳遞它的方法,叫做“位址呼叫”,顧名思義,就是你要傳遞a=5,直接把這個變數的位址傳遞給子函式,這個時候,在子函式中,對a的運算就是直接對其儲存位置的運算,所以它會改變main函式中的值。
總結:簡單來說,值轉移呼叫就是複製出乙個相同值的引數,你在子函式中修改的只是真實引數的副本; 在位址呼叫中,它們都指向同乙個儲存單元,並且通過修改位址的值來更改。 我不知道你是否理解這一點。
1. 建構函式。
並且析構函式不能被繼承。 建構函式和析構函式用於處理物件的建立和銷毀,它們只知道如何處理特定級別的物件。 因此,必須呼叫整個層次結構中的所有建構函式和析構函式,並且不能繼承。 >>>More
建構函式用於初始化,當然也可以帶有引數。 初始化函式可以帶有引數,如果引數型別和數量不同,則建構函式可以過載。 >>>More
你能說清楚嗎,我不知道你的意思。 是否要在 main 函式中呼叫乙個函式,然後不知道如何定義被呼叫的函式? 如果是這樣的話,我可以告訴你。 >>>More
與建構函式相比,析構函式在物件超出其作用域時自動執行析構函式,例如當物件所在的函式已被呼叫時。 析構函式通常用於完成“清理餘波”的工作(例如,建立乙個帶有 new 的物件以開啟一段記憶體空間,該記憶體空間應在析構函式中釋放,然後退出)。 >>>More