Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/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++中使用多重继承(其中不止一个基类不是纯接口)是否有意义? < P>最容易指向 IoSturis/COD>,它继承自 ISTRAM< 和 OFSUCT。code>cin和cout分别是istream和ostream,但fstream源自iostream_C++_Design Patterns_Inheritance_Multiple Inheritance - Fatal编程技术网

C++;多重继承? 除了教科书示例之外,在现实世界中,在C++中使用多重继承(其中不止一个基类不是纯接口)是否有意义? < P>最容易指向 IoSturis/COD>,它继承自 ISTRAM< 和 OFSUCT。code>cin和cout分别是istream和ostream,但fstream源自iostream

C++;多重继承? 除了教科书示例之外,在现实世界中,在C++中使用多重继承(其中不止一个基类不是纯接口)是否有意义? < P>最容易指向 IoSturis/COD>,它继承自 ISTRAM< 和 OFSUCT。code>cin和cout分别是istream和ostream,但fstream源自iostream,c++,design-patterns,inheritance,multiple-inheritance,C++,Design Patterns,Inheritance,Multiple Inheritance,Microsoft的ATL(活动模板库)使用多重继承作为混合类: 例如,在使用时非常常见。我在“现实世界”中使用了多重继承,在我参与编写映射应用程序的工作中 不幸的是,我记不起确切的例子,这让我感到非常沮丧 然而,这是一篇有趣的文章,关于要考虑的问题和可供选择的模式或解决方案: 我喜欢在示例中使用车辆-尤其是添加到两栖车辆中。多重继承肯定有其地位,它可能非常有用。一般来说,基类应该尽可能抽象,这意味着您不应该从基类中创建对象,但没有什么可以阻止您从具体类继承。您可以利用从基类继承的实现,这无疑

Microsoft的ATL(活动模板库)使用多重继承作为混合类:


例如,在使用时非常常见。

我在“现实世界”中使用了多重继承,在我参与编写映射应用程序的工作中

不幸的是,我记不起确切的例子,这让我感到非常沮丧

然而,这是一篇有趣的文章,关于要考虑的问题和可供选择的模式或解决方案:


我喜欢在示例中使用车辆-尤其是添加到两栖车辆中。

多重继承肯定有其地位,它可能非常有用。一般来说,基类应该尽可能抽象,这意味着您不应该从基类中创建对象,但没有什么可以阻止您从具体类继承。您可以利用从基类继承的实现,这无疑也是一个优点。iostream上的一个答案示例是一个很好的例子。另一个例子可能是,对一个同时也是企业所有者/董事的员工进行建模,您将其建模为

public class Director
{
   ................
   double CalculateDividend();
   bool ApproveBudget();
};

public class Employee
{
   ................
   double CalculateSalary();
};


public class WorkingDirector: Employee, Director
{
   ..............
};
现在WorkingDirector对象可以做员工和主管可以做的事情,这在现实世界中是完美的。我们甚至不需要覆盖任何方法实现


在许多情况下,通过多重继承支持,实现设计模式也变得更加容易

在我看来,这是有争议的。在使用模板之前,有相当多的案例证明了这一点。基本上,您可以使用基类,就像您可以使用带有模板的策略类一样。例如,考虑一个模板:

template <typename policy1, typename policy2>
class whatever {
    policy1 p1;
    policy2 p2;
public:
    void dosomething() { if (p1.enquire()) p2.dosomething(); }
};
})


在这两种情况下,基本上都是将“策略”的实例嵌入到新对象中。因为我们使用的是私有继承,所以与LSP没有关系——就像基于策略的模板一样,其目的不是创建一个大的层次结构来断言层次结构成员之间的任何关系——而是,这只是简单地创造一种能力,可以根据需要创建大量不相关的类。

如果我们有一个类击球手,它的数据成员包括跑数、六次、四次、击球平均数、跑动率等。我们有另一个类“保龄球手”,它可能有数据成员,如所拿球门数、每过一次的跑数、,平均边线等。对于一名全能运动员,“全能者”一级将从“击球手”和“保龄球手”两个级别衍生而来。
在C++编程的近20年中,这可以被引用为一个真实世界的多重继承< /p>+1的例子。我从来没有经历过需要使用多个继承的情况。@ Raedwald并不意味着某人不知道C++中的多重继承。这不是一个真实的例子。e、 但是没有从现实世界中引用任何东西。
class whatever : policy1, policy2 {   
    void dosomething() { if (enquire()) dosomething();  }