继承而不重复代码

时间:2017-04-11 09:04:48

标签: c++ class inheritance

我有4个班,比方说:A班,B班,C班和D班。

  1. B类继承自A类。

  2. C类和D类继承自B类。

  3. 类A和B是抽象类。

  4. 我想在A类中声明一个字段,让我们说int posision并通过将参数(int parameterValue)的值赋给该字段来在C类和D类的构造函数中定义该字段。

    有没有任何解决方案可以在后代类的所有构造函数中重复行position = parameterValue而不执行此操作?

2 个答案:

答案 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;
};

Demo

答案 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) {
        }
};