我有4个班,比方说:A班,B班,C班和D班。
B类继承自A类。
C类和D类继承自B类。
类A和B是抽象类。
我想在A类中声明一个字段,让我们说int posision
并通过将参数(int parameterValue
)的值赋给该字段来在C类和D类的构造函数中定义该字段。
有没有任何解决方案可以在后代类的所有构造函数中重复行position = parameterValue
而不执行此操作?
答案 0 :(得分:4)
您可以使用继承的构造函数:
struct A
{
A(int position) : position(position) {}
virtual ~A() = default;
int position;
};
struct B : public A
{
using A::A;
};
struct C : public B
{
using B::B;
};
struct D : public B
{
using B::B;
};
答案 1 :(得分:2)
将它放在B类中,并在后代类的开头调用超级构造函数。像那样:
class A {
protected:
int position;
};
class B: public A {
public:
B(int parameterValue) : A() {
position = parameterValue;
}
};
class C: public B {
public:
C(int parameterValue) : B(parameterValue) {
}
};