最佳实践:A组成B,衍生A组成衍生B
Best practice: A compose B, DerivedA compose DerivedB
- 结构体
B
保存数据 - 结构体
DerivedB
:B
为B
添加了一些特定的数据 - 类CCD_ 5保存对类型为CCD_
- 类CCD_ 7保存对类型为CCD_
这本身就是一个糟糕的设计吗?
如果没有,实现这一目标的最佳方式是什么?
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++中的一种设计气味。它通常是一个标志,表明你的设计正在打破利斯科夫替代原则。相反,考虑对B
和DerivedB
使用多态性来实现所需的行为。
也许可以使用模板?
我在这里举了一个例子:http://melpon.org/wandbox/permlink/oMEzjpnsdOmgKTRs
但这是更好的方式吗?
相关文章:
- 什么时候调用组成单元对象的析构函数
- 构建一个由C和C++文件组成的库
- boost::spirit::karma 替代生成器,带有 boost::variant 由字符串和字符串别名组成
- 检查由括号、方括号和大括号组成的一组方括号是否有效?
- 如果 x.h 仅由函数声明组成,为什么有必要在 x 中包含 x.h.cpp
- std::regex:匹配由数字和空格组成的字符串,并提取数字.如何?
- 是否可以使用 DirectX 3D 11 绘制由三角形组成的圆?
- C++17 折语法测试矢量组成
- 如何声明二维矢量由二维矢量组成?
- 在编译时而不是运行时创建一个由两个字节组成的值
- 我有一个嵌套数组,它由另一个数组中的元素组成,这些元素分组为2.之后,我想显示每个元素的属性
- 我想创建一个嵌套数组,该数组由另一个数组中的所有元素组成,但分为两个
- 计算表达式字符串由 std::map 中的键组成
- 如何删除由节点组成的树,并相互指向彼此的指针?
- 初始化由类构造函数中的向量组成的矩阵
- C++检查十六进制是否由 ABCDEF1 OR 0 组成
- 如何在C 17中定义功能组成
- 我如何使用Qsort对结构(由几个不同元素组成)进行排序
- 如何制作由原始图形的最短路径边组成的新图形
- 最佳实践:A组成B,衍生A组成衍生B