我有以下类别:为什么你必须定义一个空的构造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'定义了一个非默认构造函数,所以是的,您需要向该类添加默认构造函数。 –