是否有某种方法可以避免在继承的类中重复代码

Is there some way not to repeat the code in inherited classes

本文关键字:代码 继承 方法 可以避免 是否      更新时间:2023-10-16

我有一个抽象类A和2个继承自类A的类,它们是BC。让我们离开类B,仔细看看类C。我有两个继承自类C的类,它们是C1C2等等…

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 = '#';
};

问题是,当我想调用get_symbol()方法C1C2…对象,我从C和一些随机字符得到一个方法。我必须写:

char get_symbol() { return symbol;}

为所有的Cn类获取它们实际的符号。

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

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

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 = '#';
};