我想知道如果派生类有一个没有构造函数的类是否有意义。如果没有,有没有办法以不同的方式做我想做的事情?
我的情况如下: 我希望用户只使用派生类,但这些类具有共同的数据成员和方法。
编辑:由于类存在默认构造函数,这意味着用户可以直接创建Instrument的实例,那么我该怎么做我想要的呢?
0.00100000 = 4
0.10000000 = 2
0.01000000 = 3
1.00000000 = 1
0.00001000 = 6
0.00000100 = 7
0.00000000 = 0
答案 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
constructor
中derived
class
}} constructor
。即使没有你明确地称它。即使您没有创建parent
类default
constructor
也会被调用。默认情况下
public constructor with no parameter is present in every class
if it has no overridden constructor.
是的,在创建derived class
之后,父类的所有公共成员都将出现在derived class instance
。