我想知道如果派生类有构造函数,那么没有构造函数的类是否有意义。如果没有,是否有一种以不同方式做我想做的事情的方法?
我的情况如下:我希望用户只使用派生类,但是这些类具有数据成员和方法的共同点。
编辑:由于类存在默认构造函数,这意味着用户总是可以直接创建一个仪器实例,那么我如何才能做我想做的事情呢?
class instrument{
public:
double get_price();
std::string get_udl();
private:
double m_price;
std::string m_udl;
};
class stock : public instrument{
public:
double get_dividend();
private:
double m_dividend;
};
class option : public instrument{
public:
double get_strike();
private:
double m_strike;
};
发布于 2018-01-02 21:50:26
我希望用户只使用派生类,但是这些类具有共同的数据成员和方法。
让您的默认(或任何其他)c‘’tor,但声明它使用protected
访问。现在只有派生类可以调用它。只有在继承的时候才能有效地使用。
class instrument{
public:
double get_price();
std::string get_udl();
protected:
instrument() = default;
private:
double m_price;
std::string m_udl;
};
这也避免了与使类抽象相关的开销。如果您不需要多态性,那么您不应该仅仅使用它来使类只作为基类使用。
发布于 2018-01-02 21:29:48
有没有想过抽象类?
抽象类是一个被声明为抽象的类,它可能包含也可能不包含抽象方法。抽象类不能实例化,但可以被子类化。
这不是你要找的吗?
发布于 2018-01-02 21:24:17
当未定义默认构造函数时,编译器将自动为您生成构造函数,对基本类型的成员不做任何操作,并为struct/class类型的成员调用默认构造函数。
因此,结论是,没有的类没有任何构造函数是没有意义的,因为每当定义该类的实例时,都必须调用至少一个(更多的类可能会被调用,并带有愉快的构造)。
https://stackoverflow.com/questions/48071569
复制