gpt4 book ai didi

c++ - 对象组合促进代码重用。 (T/F,为什么)

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:56:49 24 4
gpt4 key购买 nike

我正在备考,正在尝试解决这个问题。具体问题是“Inheritance and object composition both promote code reuse. (T/F)”,但我相信我理解问题的继承部分。

我相信继承可以促进代码重用,因为相似的方法可以放在抽象基类中,这样相似的方法就不必在多个子类中以相同的方式实现。例如,如果您有三种形状,并且每种形状的方法“getName”只返回一个数据成员“_name”,那么既然可以在抽象基类中实现一次,为什么还要在每个子类中重新实现该方法类“形状”。

但是,我对对象组合的最佳理解是对象/类之间的“has-a”关系。例如,一个学生有一个学校,一个学校有很多学生。这可以看作是对象组合,因为它们不能真正存在没有彼此(没有任何学生的学校不完全是一所学校,是吗?等)。但我看不出这两个对象“拥有”彼此作为数据成员会促进代码重用。

有什么帮助吗?谢谢!

最佳答案

对象组合可以促进代码重用,因为您可以将实现委托(delegate)给不同的类,并将该类作为成员包括在内。

与其将所有代码放在最外层类的方法中,不如创建范围更小、方法更小的类,并在整个代码中重用这些类/方法。

class Inner
{
public:
void DoSomething();
};

class Outer1
{
public:
void DoSomethingBig()
{
// We delegate part of the call to inner, allowing us to reuse its code
inner.DoSomething();
// Todo: Do something else interesting here
}

private:
Inner inner;
};

class Outer2
{
public:
void DoSomethingElseThatIsBig()
{
// We used the implementation twice in different classes,
// without copying and pasting the code.

// This is the most basic possible case of reuse

inner.DoSomething();

// Todo: Do something else interesting here
}


private:
Inner inner;
};

正如您在问题中提到的,这是两个最基本的面向对象编程原则之一,称为“有关系”。继承是另一种关系,称为“is-a replationship”。

您还可以以非常有用的方式结合继承和组合,这通常会增加您的代码(和设计)重用潜力。任何真实世界和架构良好的应用程序都会不断地结合这两个概念以获得尽可能多的重用。当您了解设计模式时,您会发现这一点。

编辑:

根据 Mike 在评论中的要求,一个不太抽象的例子:

// Assume the person class exists

#include<list>

class Bus
{
public:
void Board(Person newOccupant);
std::list<Person>& GetOccupants();

private:
std::list<Person> occupants;
};

在此示例中,您没有重新实现链表结构,而是将其委托(delegate)给列表类。每次使用该列表类时,您都在重复使用实现该列表的代码。

事实上,由于列表语义如此普遍,C++ 标准库为您提供了 std::list,您只需要重用它即可。

关于c++ - 对象组合促进代码重用。 (T/F,为什么),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6906372/

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