有没有构造函数的类是否有意义?

时间:2018-01-03 05:15:54

标签: c++ class

我想知道如果派生类有一个没有构造函数的类是否有意义。如果没有,有没有办法以不同的方式做我想做的事情?

我的情况如下: 我希望用户只使用派生类,但这些类具有共同的数据成员和方法。

编辑:由于类存在默认构造函数,这意味着用户可以直接创建Instrument的实例,那么我该怎么做我想要的呢?

0.00100000 = 4
0.10000000 = 2
0.01000000 = 3
1.00000000 = 1
0.00001000 = 6
0.00000100 = 7
0.00000000 = 0

4 个答案:

答案 0 :(得分:5)

  

我希望用户只使用派生类,但这些类具有共同的数据成员和方法

拥有默认(或任何其他)c'tor,但声明protected访问权限。现在只有派生类可以调用它。有效地使其仅在继承时可用。

class instrument{
    public:
        double get_price();
        std::string get_udl();

    protected:
        instrument() = default;

    private:
        double m_price;
        std::string m_udl;

};

这也避免了与使类抽象相关的开销。如果您不需要多态,则不应仅仅使用它来使类只能用作基类。

答案 1 :(得分:1)

想过抽象类吗?

  

抽象类是一个声明为abstract的类 - 它可能包含也可能不包含抽象方法。抽象类不能被实例化,但它们可以被子类化。

这不是你要找的吗?

答案 2 :(得分:-1)

如果没有定义默认构造函数,编译器将自动为您生成一个,对基本类型的成员不执行任何操作,并为struct / class类型的成员调用默认构造函数。

所以结论是,没有任何构造函数的类是没有意义的,因为每当你定义该类的实例时,你必须调用至少一个(可以用deligate构造调用更多)。

答案 3 :(得分:-2)

是的!绝对有道理。因为当用户创建instance derived class时,首先会parent constructorderived class }} constructor。即使没有你明确地称它。即使您没有创建parentdefault constructor也会被调用。默认情况下

public constructor with no parameter is present in every class
if it has no overridden constructor.

是的,在创建derived class之后,父类的所有公共成员都将出现在derived class instance