如何设计类继承
How to design class inheritance
我为其他人提供3个接口类IA,IB,IC。然后我需要实现这 3 个接口类。我的实现方法如下,但是 a(( 在 3 个类中的行为是一样的,我该如何复用代码。
class IA{
virtual void a() = 0;
};
class IB : public IA{
virtual void b() = 0;
};
class IC: public IA{
virtual void c() = 0;
};
class A :public IA{
void a(){}
};
class B :public IB{
void a(){}
void b(){}
};
class C :public IC{
void a(){}
void c(){}
};
有几种方法:
-
创建通用函数:
void f() { /*..*/ } class A : public IA{ void a() override { f(); } }; class B : public IB{ void a() override { f(); } void b() override { /**/ } }; class C : public IC{ void a() override { f(); } void c() override { /**/ } };
-
使用虚拟继承
class IB : public virtual IA{ virtual void b() = 0; }; class IC : public virtual IA{ virtual void c() = 0; }; class A : public virtual IA{ void a() override { /*..*/ } }; class B : public A, public IB{ void b() override { /**/ } }; class C : public A, public IC{ void c() override { /**/ } };
-
使用模板/CRTP
template </*typename Derived,*/ typename Base> struct AImpl : public Base { void a() override { /*..*/ } }; class A : public AImpl</*A,*/ IA> { }; class B : public AImpl</*B,*/ IB> { void b() override { /**/ } }; class C : public AImpl</*C,*/ IC> { void c() override { /**/ } };
-
使用合成
class A : public IA{ void a() override { /**/ } }; class B : public IB{ void a() override { mA.a(); } void b() override { /**/ } private: A a; }; class C : public IC{ void a() override { mA.a(); } void c() override { /**/ } private: A a; };
相关文章:
- 从类继承时,继承的类是否会通过父类重新定义继承的变量
- 继承模板类中的类型别名
- 打印所有继承的类成员变量和方法
- 为什么我的子类不继承父类的字符串?
- 继承的类析构函数
- 如何设计类继承
- C++ 通过接口使用从其他几个类继承的类
- 用于处理多个通信协议处理的设计类
- C++ 继承:基类中重载 operator+ 的 2 次在派生类中无法正常工作
- 从不完整的类继承的类模板
- C++排除通过派生类中的基类继承的类
- 类设计:类成员继承自同一基类
- 继承 - 查找类的对象的大小
- C++继承的类设计问题
- 使用多个继承父类和从属父类进行设计
- 设计用于继承的类
- 继承vs类模板专门化.设计的家伙
- 通过继承实现类似"二维"扩展的设计类
- c++中创建多继承组合类的设计指南
- c++分层类继承设计