c++ - 为什么你必须定义一个空的构造函数c++

标签 c++ constructor

<分区>

我有以下类(class):

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()”的匹配函数 :命令()

显然我可以通过在 ArithmeticExpression 类中添加一个不执行任何操作的空构造函数来解决这个问题。这个空的构造函数有什么特别之处可以让它工作?我没有明确地在任何地方打电话。你总是需要在 C++ 中定义一个空的构造函数吗?

我想强调的是,虽然从标题来看我的问题似乎与一些用户建议的重复问题相似,但我正在寻找的答案并不存在。我只是想了解调用构造函数时会发生什么,以及如何避免定义无用的默认构造函数,我知道在我用参数定义一个构造函数的情况下,编译器不会自动定义它。

最佳答案

只有在没有定义其他构造函数的情况下,编译器才会自动生成默认构造函数。

编辑:

对象初始化需要默认构造函数。

关于c++ - 为什么你必须定义一个空的构造函数c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23109422/

相关文章:

c++ - 通过它的质心提取对象

php - PHP 的 hash_hmac 函数的 C++ 等价物是什么?

c++ - 这个 C++ 成员初始化行为是否定义良好?

Kotlin:使用 parcelize 时的构造函数

Java,将未声明的参数量传递给数组

c++ - 如何在不使用宏的情况下在不实例化结构的情况下获取结构成员的大小?

c++ - KDevelop 没有看到 C++ 头文件

c++ - C++ 成员类是在父类之前构造的吗?

PHP 调用构造函数的参数多于指定的参数

c++ - 在泛型类之外定义函数会产生编译错误