gpt4 book ai didi

C++ - 将两个子类的共同成员

转载 作者:可可西里 更新时间:2023-11-01 18:36:43 24 4
gpt4 key购买 nike

让一个库包含以下类层次结构:

class LuaChunk
{
};

class LuaExpr : public LuaChunk
{
};

class LuaScript : public LuaChunk
{
};

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

class AppLuaExpr : public LuaExpr
{
private:

Foo * someAppSpecificMemberFoo;
Bar * someAppSpecificMemberBar;
};

class AppLuaScript : public LuaScript
{
private:

Foo * someAppSpecificMemberFoo;
Bar * someAppSpecificMemberBar;
};

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

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

我查看了 Wikipedia 上列出的现有结构设计模式,但似乎没有任何一种适用于我的问题。

谢谢。

最佳答案

您可以将公共(public)数据表达为它们自己的类,并在构造期间传递它。这样您就可以使用组合封装所有内容。

class Core { }; 

class Component {
int one, two;
public:
Component(int one, int two) : one(one), two(two)
{}
};

class Mobious : public Core
{
Component c;
public:
Mobious(Component &c) : Core(), c(c) { }
};

class Widget : public Core
{
Component c;
public:
Widget(Component &c) : Core(), c(c)
{}
};

int main(void)
{
Widget w(Component{1, 2});
Mobious m(Component{2, 3});;
return 0;
}

关于C++ - 将两个子类的共同成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36008299/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com