有没有办法不重复继承类中的代码

时间:2016-11-11 00:08:31

标签: c++ inheritance

我有一个抽象类 A 和2个继承自A类的类,其中 B C 。让我们离开B班,仔细看看课程 C 。我有几个继承自 C 类的课程 C1 C2 等等......

class A{
protected:
char symbol;
public:
virtual char get_symbol() = 0;
};

class C : public A{
public:
virtual char get_symbol() { return symbol;}
};

class C1 : public C{
protected:
char symbol = '#';
};

问题在于,当我想为 C1 C2 ...对象调用get_symbol()方法时,我从 C <获取方法/ strong>和一些随机字符。我必须写:

char get_symbol() { return symbol;}

让所有Cn类获得它们的实际符号。

我的问题是:是否有任何解决方案可以避免代码冗余并获得Cn对象的正确符号( C 类型对象甚至没有他的符号)

此致

1 个答案:

答案 0 :(得分:2)

CRTP aka静态继承可以在这里提供帮助:

struct A{
    virtual char get_symbol() const = 0;
};

template<typename Derived>
struct C : public A{
    virtual char get_symbol() const override {
         return static_cast<Derived const&>(*this).symbol;
    }
};

struct C1 : public C<C1>{
    char symbol = '#';
};