我是OOP的新手。我仍處於學習階段。爲什麼我們需要OOP中的構造函數?
爲什麼我們需要構造函數?當我們可以通過編寫「初始化函數」初始化屬性的值(變量)?
基本上,爲什麼我們寫一個構造函數,當我們可以通過編寫一個初始化變量的函數來實現相同的結果呢?
我是OOP的新手。我仍處於學習階段。爲什麼我們需要OOP中的構造函數?
爲什麼我們需要構造函數?當我們可以通過編寫「初始化函數」初始化屬性的值(變量)?
基本上,爲什麼我們寫一個構造函數,當我們可以通過編寫一個初始化變量的函數來實現相同的結果呢?
構造函數是「初始化函數」
而不是調用兩個功能
object = new Class;
object.initialize();
您只要致電
object = new Class();
構造函數中的邏輯可以是相同的內部的邏輯初始化函數,但它更整齊,避免你命名你的函數initialize(),我命名我的initialize_variables()和其他人命名他們的it_vars()...一致性很有用。
如果您的構造函數非常大,您可能仍希望將變量初始化拆分爲單獨的函數並從構造函數中調用該函數,但這是該場景的特定例外。
通常將強制性的東西放到構造函數和可選的元素中放到Initialise
函數中。
例如,考慮放大器要求電源,以便將其提供給其構造函數。從邏輯上講,你可能想打開它並設置它的權力水平,但有人可能會爭辯說,你可能不想這樣做,直到後來。在僞代碼中:
class Amplifier
{
public Amplifier(PowerSource powerSource)
{
// create amplifier...
}
public int PowerLevel;
public void Initialise()
{
// turn on...
}
}
上面的例子是比較薄弱的,但它說明了這些概念。然而,這總是一個設計問題,而且意見也會有所不同。
但是,某些類別的對象在構建階段必須執行明顯的設置操作。在這些情況下,擁有構造函數的要求很容易理解。例如,如果您的對象可能需要可變數量的內存,那麼構造函數將是分配它的合理位置,並且析構函數或終結器將是再次釋放它的合理位置。
構造函數是一個特殊的成員函數,它具有與類名相同的名稱,並且只要該類的對象被創建就被調用。它們用於初始化對象中的數據字段。
構造具有以下特點:
它具有相同的名稱,類名。
每當創建類的對象時調用它。
獲取更多信息 https://en.wikipedia.org/wiki/Constructor_(object-oriented_programming)
構造函數的作用是初始化變量/ values.it是「初始化函數」爲什麼我們使用的構造函數,而不是我發現。唯一的理由用於初始化變量的正常函數是阻止不同的人使用不同的函數名稱並避免模糊性,並且使用構造函數更容易,該構造函數在類運行時自動實例化,而不必編寫單獨的代碼instantiation.this可能看起來很小,並且像一些不需要太多工作的東西,但只適用於一個非常小的程序,對於較大的程序來說,鬥爭是真實的。
所以回答很簡單
爲什麼我們要寫構造函數?
因爲在C可以寫, int i;
如果像這樣寫在上面的情況下的數據類型和變量定義如果定義像這樣的存儲器分配用於i
variable.So簡單這裏我們定義類名和變量名(對象名稱)我們可以創建分配給類名稱的內存。
示例 myClass objectName;
但是在C++中,new關鍵字用於動態內存分配,所以我們可以將這個動態內存分配給我們的類,但這裏是我們的例子myClass
是我們的類,我們想分配給分配的動態內存。
所以
myClass objectName = new myClass();
,簡單的構造是類變量內存分配被稱爲constructor.`
這是不是真的。在許多語言中,構造函數不能調用其他構造函數,因此需要一個獨立的初始化函數,該函數要麼由外部調用,要麼由構造函數的每個重載調用。還有一些模式,其中對象在第一次使用前構建並初始化。還有一些非常有用的模式需要命名的靜態工廠方法來調用私有或受保護的構造函數。 – Xharlie 2014-10-17 12:07:12
同樣,這是「標準」的一個例外,您可能希望使用單獨的函數來初始化變量(或執行對象的每個實例化「共享」的其他處理)。它不會刪除構造函數的用處,也不會暗示構造函數應該被變量初始化函數替換。在特定情況下,沒有任何東西可以阻止您將構造函數留空並調用其他函數,但是這不會改變OOP範例中構造函數的概念。 – 2014-10-17 12:09:54
我不認爲構造函數是無用的,只是構造函數!=初始化方法。他們都有他們存在的理由。這個答案表明,初始化方法永遠不會超過重構工具,因此所有的代碼都沒有綁定到一個構造方法中。坦率地說,這不是事實。 – Xharlie 2014-10-17 12:14:06