gpt4 book ai didi

c++ - 最佳实践 : A compose B, DerivedA compose DerivedB

转载 作者:行者123 更新时间:2023-11-28 05:19:11 25 4
gpt4 key购买 nike

  • 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 .而是考虑对 BDerivedB 使用多态性来实现所需的行为。

关于c++ - 最佳实践 : A compose B, DerivedA compose DerivedB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41877995/

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