我有以下類別:爲什麼你必須定義一個空的構造C++
class ArithmeticExpression
{
public:
ArithmeticExpression(std::string expr);
}
class Command
{
public:
Command(){};
//this is a virtual class
}
class CommandAssign : public Command
{
private:
ArithmeticExpression expr;
public:
CommandAssign();
CommandAssign(ArithmeticExpression);
}
現在,當我嘗試寫的CommandAssign類的構造函數爲:
CommandAssign::CommandAssign(ArithmeticExpression expr)
:Command()
{
this -> expr = ArithmeticExpression(expr.getExpr());
}
我得到錯誤:
沒有匹配函數調用'ArithmeticExpression :: ArithmeticExpression()' :Command()
顯然我可以通過在ArithmeticExpression類中添加一個空構造函數來解決這個問題,該類不會做任何事情。這個空的構造函數讓它工作起來有什麼特別之處?我不明確地打電話到任何地方。你是否總是需要在C++中定義一個空構造函數?
我想強調的是,儘管從標題看來,我的問題似乎與某些用戶建議的副本類似,但我所尋找的答案並不存在。我只是想了解在構造函數被調用時會發生什麼,以及如何避免定義一個無用的默認構造函數,我知道這已經不是由編譯器自動定義的,在這種情況下,我使用參數定義了構造函數。
請參閱相關:http://stackoverflow.com/questions/5498937/when-do-we-need-to-have-a-default-constructor – EdChum
當您向類中添加構造函數時,默認構造函數不是自動生成更多。 –
您的'Command'類嵌入了'ArithmeticExpression'的私有實例,該實例在當前代碼中默認構造,'ArithmeticExpression'定義了一個非默認構造函數,所以是的,您需要向該類添加默認構造函數。 –