我有兩個類,A類和B類。我不想讓它們中的任何一個具有默認構造函數,因爲它們都需要實例化帶參數。然而,我似乎無法在類B中創建類A的對象,而無需使用默認的公共構造函數,該類允許在沒有用戶定義的值的情況下實例化類(試圖避免默認值)。在沒有指針的情況下,在另一個類構造函數中沒有默認構造函數的C++實例化對象
這是我的設置:
對象我想其他B級的內部進行初始化的類:
ClassA.h
Class A //No default constructor
{
public:
A(int var1, int var2); //Class A's Constructor
}
我想創建此對象的實例當B類被實例化時,這是實例化的,因爲我需要傳入類B的值來實例化類A.
ClassB.h
Class B //No default Constructor
{
public:
A myClassA; //The public variable in class B I want to hold an object of class A
int somePublicVar;
B(int var1, int var2, int var3); //Class B's Constructor
}
我似乎無法得到類型A的myClassA對象來實例化。
ClassB.cpp
B::B(int var1, int var2, int var3)
{
B = A(var1, var2);
somePublicVar = var3
}
我是新來的C++,但我很熟悉C#和C,但我似乎無法找到正確的語法/過程來完成這一點。
我已經閱讀了與這個問題有關的問題,使用指針來實現這一點似乎是「初學者」的方式來解決這個問題,因爲對象將需要手動銷燬,所以我試圖沒有指針就可以做到這一點。可能嗎?這個過程的最佳做法是什麼?
,如果我一定要做到這一點,我將訴諸三分球,但我與操作掙扎過,因爲如果我定義了一個爲指針,而不是一個對象,我得到一個錯誤,當我這樣做:
myClassA = & A(var1,var2);因爲我的理解是「A(var1,var2)」的作用域是構造函數,並且在構造函數完成之後將被刪除,所以我們不能使用這個擴展名,所以我們不能保存一個指針。所以我不確定我會如何在這種情況下使用指針方法。
我似乎只能找到這個問題的部分答案,但沒有一個似乎滿足所有條件。我很感激幫助。
編輯17年9月14日:
我忘了提,我也想有myClassA爲B類的內部公共變量如果我沒有默認的構造函數,我該怎麼預防這從給我的「沒有默認構造函數」錯誤?
-Thanks先進
謝謝。我喜歡這麼快速的回覆。但是,我怎樣才能將myClassA定義爲類B中的公共變量?它一直給我默認的構造函數錯誤。 – WhatIsASyntax
@WhatIsASyntax它不應該犯一個錯誤。檢查所有可能嘗試調用'A'的默認構造函數的地方。這裏有一個實例,它顯示輸出中沒有編譯器錯誤:http://coliru.stacked-crooked.com/a/d94463408244b094 –
@WhatIsASyntax如果你想要一個指向'A'的指針作爲'B'的成員,你可以做這樣的事情:'class B {unique_ptr p; B :: B(int var1,int var2,int var3){p = make_unique (var1,var2);}'。 – AlexD