生活中充满了对象之间反复出现的模式、关系和层次结构。通过探索和理解这些,我们可以深入了解真实世界对象的行为,从而增强我们对这些对象的理解。
例如,假设有一天你走在街上,看到一个亮黄色的物体附着在一个绿色的灌木状物体上。你可能会认出那个亮黄色的东西是一朵花,而那个绿色的灌木状东西是一株植物。即使你以前从未见过这种特定类型的植物,你也会知道绿色的东西是叶子,它们收集阳光。你会知道花有助于植物繁殖。你还会知道如果你杀死这株植物,花也会死亡。
但是,你以前从未遇到过这种类型的植物,你是如何知道这一切的呢?你之所以知道,是因为你理解植物的抽象概念,并且认识到这株植物是该抽象的一个实例。你知道大多数植物(部分)由叶子组成,有些有花。你知道叶子与阳光相互作用(即使你不知道具体是如何作用的),并且花的生存依赖于植物。因为你对植物的一般性了解,所以你可以推断出很多关于这株植物的信息。
同样,编程也充满了反复出现的模式、关系和层次结构。特别是当涉及到编程对象时,管理真实世界对象的相同模式也适用于我们自己创建的编程对象。通过更详细地检查这些,我们可以更好地理解如何提高代码重用性并编写更具可扩展性的类。
在前面的章节中,我们已经探讨了一些关于重复模式的想法:我们创建了循环和函数,使我们能够多次执行特定任务。此外,我们创建了自己的枚举、结构和类,使我们能够实例化给定类型的对象。
我们还探索了一些原始形式的层次结构,例如数组(它允许我们将元素分组到更大的结构中)和递归,其中一个函数调用其自身的派生版本。
然而,我们尚未过多关注对象之间的关系,尤其是在编程方面。
对象之间的关系
在现实生活中,两个对象之间可能存在许多不同种类的关系,我们使用特定的“关系类型”词语来描述这些关系。例如:一个正方形“是”一个形状。一辆汽车“有”一个方向盘。一个计算机程序员“使用”一个键盘。一朵花“依赖于”蜜蜂进行授粉。一个学生是班级的一“员”。你的大脑“是”你的一部分(至少,如果你已经读到这里,我们可以合理地这样假设)。
所有这些关系类型在 C++ 中都有有用的类比。
在本章中,我们将探讨“部分”、“拥有”、“使用”、“依赖于”和“成员”这些关系类型的细微差别,并展示它们在 C++ 类中如何有用。我们还将探讨一些不适合其他地方的相关主题。
然后,我们将在接下来的两章中,通过 C++ 的继承模型和虚函数来探讨“是”关系。是的,这是一个大话题。
好了,背景设置就到这里。让我们开始吧。