是否有某种方法可以避免在继承的类中重复代码
Is there some way not to repeat the code in inherited classes
我有一个抽象类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 = '#';
};
问题是,当我想调用get_symbol()方法C1,C2…对象,我从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 = '#';
};
相关文章:
- 删除C++继承中虚拟类成员的代码重复
- 删除继承中的代码重复?
- 如何定义一个没有重复代码的继承的 const 类成员函数?
- 如何编写将要继承的泛型代码?
- 继承、覆盖和虚函数,以避免重复代码
- 继承此C++代码有什么问题
- 多级继承程序代码的输出
- 代码在虚拟函数和继承方面未按预期工作
- 为什么下面的代码不会编译(c++中的继承)
- 为什么这个C++继承代码示例的行为是这样的
- 如何与模板正确重写此使用继承的C 代码
- 如何删除此与继承相关的代码气味
- 不重复代码的继承
- 继承可以用来减少C++中编译代码的大小吗?
- C++ 在向某些继承树类引入附加接口时避免代码重复
- 是C 单继承的内存布局与此C代码相同
- 通用lambda,继承和尾随返回类型:此有效代码
- 如何使用模板或继承使以下代码工作
- 在继承的接口中调用自定义代码
- C++ 中的高性能代码(继承、指向函数的指针、if)