- struct
B
保存数据。 - struct
DerivedB
:B
将一些特定数据添加到B
。 A
类持有对B
类型对象的引用。DerivedA
类持有对DerivedB
类型对象的引用。
它本质上是一个糟糕的设计吗?
如果不是,实现该目标的最佳方法是什么?
class A
{
public:
A() :m_b(std::make_unique<B>(B())) {}
B& getB() { return *m_b; }
protected:
A(std::unique_ptr<B> b):m_b(std::move(b)) {}
private:
std::unique_ptr<B> m_b;
};
class DerivedA : public A
{
public:
DerivedA() :A(std::make_unique<B>(DerivedB())) {}
DerivedB& getDerivedB() { return static_cast<DerivedB&>(getB()); }
};
这个使用强制转换的解决方案是最好的吗?
最佳答案
Is it inherently a bad design?
是的,向下转换通常被认为是 C++ 中的一种设计味道。它通常是一个标志,表明您的设计正在打破 Liskov substitution principle .
而是考虑对 B
和 DerivedB
使用多态性来实现所需的行为。
关于c++ - 最佳实践 : A compose B, DerivedA compose DerivedB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41877995/