C – 将成员放在两个子类的共同位置

前端之家收集整理的这篇文章主要介绍了C – 将成员放在两个子类的共同位置前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
让包含以下类层次结构的库:
  1. class LuaChunk
  2. {
  3. };
  4.  
  5. class LuaExpr : public LuaChunk
  6. {
  7. };
  8.  
  9. class LuaScript : public LuaChunk
  10. {
  11. };

现在我想通过扩展这两个类在我的应用程序中使用这个库:

  1. class AppLuaExpr : public LuaExpr
  2. {
  3. private:
  4.  
  5. Foo * someAppSpecificMemberFoo;
  6. Bar * someAppSpecificMemberBar;
  7. };
  8.  
  9. class AppLuaScript : public LuaScript
  10. {
  11. private:
  12.  
  13. Foo * someAppSpecificMemberFoo;
  14. Bar * someAppSpecificMemberBar;
  15. };

这里的问题是,如果我有很多成员,每个成员都有自己的getter / setter对,那么它会产生大量的代码重复.

有没有办法,不使用多重继承(我想避免)将AppLuaExpr和AppLuaExpr中包含的特定于应用程序的东西放在一起?

我已经看过维基百科上列出的现有结构设计模式,但看起来似乎并没有适应我的问题.

谢谢.

解决方法

您可以将公共数据表示为他们自己的类,并在构造期间传递它.这样你就可以使用合成来封装所有内容.
  1. class Core { };
  2.  
  3. class Component {
  4. int one,two;
  5. public:
  6. Component(int one,int two) : one(one),two(two)
  7. {}
  8. };
  9.  
  10. class MobIoUs : public Core
  11. {
  12. Component c;
  13. public:
  14. MobIoUs(Component &c) : Core(),c(c) { }
  15. };
  16.  
  17. class Widget : public Core
  18. {
  19. Component c;
  20. public:
  21. Widget(Component &c) : Core(),c(c)
  22. {}
  23. };
  24.  
  25. int main(void)
  26. {
  27. Widget w(Component{1,2});
  28. MobIoUs m(Component{2,3});;
  29. return 0;
  30. }

猜你在找的C&C++相关文章