什么时候需要默认构造函数?

时间:2018-09-26 03:36:55

标签: c++ class oop constructor default

class Test
{
private :
    int i;
public:
    Test(int m)
    {
      i = m;
    }
    void restart(int k)
    {
        Test(k);
    }
};

但是,编译器(VS17)向我发送一条错误消息,指出“类Test不存在默认构造函数”,但我认为我不需要默认构造函数,因为此类中的所有函数都需要一个int类型参数。 / p>

1 个答案:

答案 0 :(得分:6)

class Test {
// ...
    void restart(int k)
    {
        Test(k);
    }
};

语句Test(k);声明了名为Test的类型k的变量。通过调用不存在的默认构造函数来初始化此变量k

  

我认为我不需要默认的构造函数,因为此类中的所有函数都需要一个int类型的参数。

这既不是class是否具有/不需要默认构造函数的原因。

如果要在Test::i内设置Test::reset()的值,则只需这样做:

class Test
{
private:    
    int i;

public:    
    Test(int m) : i{ m }  // you should use initializer lists instead of 
    {}                    // assignments in the constructors body.

    void restart(int k) { i = k; }
};