Does it make sense to have a class without constructor?
我想知道如果派生类有一个没有构造函数的类是否有意义。如果没有,有没有一种方法可以做我想做的不同的事情?
我的情况如下:我希望用户只使用派生类,但这些类具有共同的数据成员和方法。
编辑:由于类存在默认的构造函数,这意味着用户总是可以直接创建一个Instrument实例,那么我该怎么做呢?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | 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; }; |
I want the users to only use the derived classes, but those have data members and methods in common
让您的默认(或任何其他)委托人,但请使用
1 2 3 4 5 6 7 8 9 10 11 12 13 | class instrument{ public: double get_price(); std::string get_udl(); protected: instrument() = default; private: double m_price; std::string m_udl; }; |
这还避免了与使类抽象相关的开销。如果您不需要多态性,那么您不应该仅仅将它用于使类仅可用作基类。
有没有想过抽象类?
An abstract class is a class that is declared abstract—it may or may not include abstract methods. Abstract classes cannot be instantiated, but they can be subclassed.
这不是你要找的吗?
当没有定义默认构造函数时,编译器将自动为您生成一个,对基本类型的成员不做任何操作,并为结构/类类型的成员调用默认构造函数。
因此,结论是,没有任何构造函数的类是没有意义的,因为每当定义该类的实例时,必须至少调用一个(可以使用Deligate构造调用更多实例)。
对!当然有道理。因为当用户创建
1 2 | public constructor with no parameter is present in every class if it has no overridden constructor. |
是的,在创建