gpt4 book ai didi

C++ OOP 重复继承模式

转载 作者:行者123 更新时间:2023-11-30 03:51:27 24 4
gpt4 key购买 nike

我有以下类,带有方法的类 A 和容器类 B:

class A
{
void foo();
};
class B
{
A * m_a;
void setA(A* a)
{
m_a = a;
}
void callFoo()
{
m_a->foo();
}
};

所以现在我想将 A 的功能扩展到 BarA 添加 fooBar(),所以我还必须创建一个 BarB 来调用这个新方法。

class BarA : public A
{
void fooBar();
};


class BarB : public B
{
void callFooBar()
{
// I know for sure its a BarA, but its saved as an A pointer
BarA * barA = dynamic_cast<BarA*>(m_a)
barA->fooBar();
}
};

现在我们创建调用者:

class LetsFooBar
{
BarA barA;
BarB barB;

void foobar()
{
barB.setA(&barA);
barB.callFooBar();
}
}

一切正常,但模式中存在 dynamic_cast 问题,以及在想要扩展 A 类时需要扩展 B 类。

我想找到一个更优雅的方法来解决这个问题。

谢谢

最佳答案

我同意其他评论,即最佳解决方案将与您真正想做的事情相关联。然而,这里还有另一种使用静态多态而不是动态多态的可能性(包括一些小的语法更改以使其能够编译):

class A
{
public:
void foo();
};

template <typename T>
class B
{
protected:
T * m_a;

public:
void setA(T* a)
{
m_a = a;
}

void callFoo()
{
m_a->foo();
}
};

class BarA : public A
{
public:
void fooBar();
};

class BarB : public B<BarA>
{
public:
void callFooBar()
{
m_a->fooBar();
}
};

请注意,这与 Andrea 的回答略有不同。

关于C++ OOP 重复继承模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31255989/

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