Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么适配器将公开从目标继承,而私下从适配器继承? 在讨论C++实现时,在“设计模式:可重用面向对象软件的元素”中, > > > > > > >: >………在类适配器的C++实现中, >代码>适配器将从目标< /代码>中公开继承,并私下从 Advuto< >。[……]_C++_Oop_Design Patterns_Inheritance_Adapter - Fatal编程技术网

为什么适配器将公开从目标继承,而私下从适配器继承? 在讨论C++实现时,在“设计模式:可重用面向对象软件的元素”中, > > > > > > >: >………在类适配器的C++实现中, >代码>适配器将从目标< /代码>中公开继承,并私下从 Advuto< >。[……]

为什么适配器将公开从目标继承,而私下从适配器继承? 在讨论C++实现时,在“设计模式:可重用面向对象软件的元素”中, > > > > > > >: >………在类适配器的C++实现中, >代码>适配器将从目标< /代码>中公开继承,并私下从 Advuto< >。[……],c++,oop,design-patterns,inheritance,adapter,C++,Oop,Design Patterns,Inheritance,Adapter,有人能在这里解释一下原因吗?在面向对象编程中,对象类之间的关系可以分为“is-a”、“has-a”或“根据实现” 当C++出现时,“ IS-A/St>>”关系可以(也应该)通过公共继承实现。 “Has-a”可以(也应该)通过遏制实施。它使使用类仅依赖于所用类的公共部分。在极少数情况下,作为最后手段,您可能希望通过非公共继承实现“has-a”,但通常这是糟糕设计的标志 “根据实现”“可以通过包含或非公共继承来实现 非公共继承允许您访问所用类的受保护部分、重写其虚拟方法等。它还可以帮助其他人更好地理


有人能在这里解释一下原因吗?

在面向对象编程中,对象类之间的关系可以分为“is-a”、“has-a”或“根据实现”

当C++出现时,“<强> IS-A/St>>”关系可以(也应该)通过公共继承实现。 “Has-a”可以(也应该)通过遏制实施。它使使用类仅依赖于所用类的公共部分。在极少数情况下,作为最后手段,您可能希望通过非公共继承实现“has-a”,但通常这是糟糕设计的标志

根据实现”“可以通过包含或非公共继承来实现

非公共继承允许您访问所用类的受保护部分、重写其虚拟方法等。它还可以帮助其他人更好地理解您的意图(只要非公共继承表示“根据实现”,包含表示“has-a”)

另一方面,遏制有其自身的一些优势。例如,它允许拥有所用类的多个实例。它还允许我们实现依赖注入,从而满足依赖倒置原则

Adapter“是一个”目标的子类型,同时“根据”“Adaptee”实现。 因此,适配器应该从目标公开继承。 但是,您可以使用私有继承或包含来实现适配器和被适配器之间的“根据实现”关系


决定使用哪种类型的关系的主要标准之一是要实现的适配器模式的类型(类适配器或对象适配器)。

在我看来,这都是关于抽象的
Adapter
可以直接与
Adaptee
交互,但它不能作为其他类与
Adaptee
交互的代理。也许再看一次也许能提供一个更清晰的画面。