gpt4 book ai didi

c++ - C++中组合(对象组合)的目的是什么

转载 作者:行者123 更新时间:2023-12-02 09:47:25 27 4
gpt4 key购买 nike

关闭。这个问题需要details or clarity .它目前不接受答案。












想改进这个问题?通过 editing this post 添加详细信息并澄清问题.

8年前关闭。




Improve this question




我不太确定组合(对象组合)的目的。

在组合中,一个类可以有另一个类的实例。

class CInner
{
public:
CInner();
virtual ~CInner();
void Func();
};

class COuter
{
public:
COuter();
virtual ~COuter();
void Func();
private:
CInner m_inner; // Composition
};

组合是否用于将大类 segmentation 为小类的组合?

是否有任何示例表明与不使用组合时相比,组合是有用的。

最佳答案

数据聚合是一种用途,尽管这可以通过 C 中的结构来完成。但是,在面向对象编程 (OOP) 中,聚合与组合被视为“使用”和“拥有”专用类型(或子对象),分别。 OOP 擅长解决需要这种思维角度的问题。

正如 Daniel Daranas 提到的“汽车有引擎”。此外,该引擎的部件都具有不同的特性。

一辆功能齐全的汽车还会有变速箱、散热器、油箱、车轴、车轮等。所有这些都是汽车使用的“物体”,而这些“物体”又具有它们使用的零件。这称为 encapsulation .

这些组件的组合称为 object composition .但是,正如我之前提到的,这些对象之间的关系必须是一种所有权关系,因为包含其他对象的对象可以被视为“拥有”这些对象。如果不是这种情况,则称为对象聚合,这意味着外部对象仅“使用”内部对象。

像这样使用封装和对象组合的最大原因之一是因为它有助于将思维模式从一个大而复杂的问题分离为多个较小的问题,这些问题都可以单独查看,因此它们变得不那么令人生畏。

更具体地说,对象组合帮助我们抽象出由多个更简单的部分组成的单个对象的概念。

例如,如果您试图将一整本 800 页的教科书放在一个句子中(文本量相同),那么阅读和理解将非常困难。没有地方可以打破你的想法,让概念有时间沉入其中。

但是,如果您将长文本分解为句子、段落、部分、章节,甚至可能是单元,如果它看起来合适,则可以更容易理解某些主题的开始和结束位置,哪些部分更相关到什么其他部位,等等。

但是,如果不将这些句子组织成段落,将那些段落组织成部分,将那些部分组织成章节等,您将失去封装的好处。适当的组织最好描述为对象组合。

封装抽象和对象组合是 OOP 最强大和最重要的两个方面。

这里有一些关于 OOP 信息的链接以及它的好处:

OOPS : Abstraction, Encapsulation, Inheritance, Polymorphism

OOP - Data encapsulation

Chapter 20. Object-Oriented Programming Principles (OOP)

Java - Encapsulation

OBJECT ORIENTED AGGREGATION

Composition Over Inheritance

关于c++ - C++中组合(对象组合)的目的是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22964966/

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