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()); }
};
这种使用强制转换的解决方案是最好的吗?
最佳答案
它本质上是不好的设计吗?
是的,向下转换通常在C ++中被视为一种设计气味。它通常是一个标志,指示您的设计正在破坏Liskov substitution principle。
而是考虑对B
和DerivedB
使用多态来实现所需的行为。