Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.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++_Class - Fatal编程技术网

C++ 两个类可以同时从彼此继承吗?

C++ 两个类可以同时从彼此继承吗?,c++,class,C++,Class,我今天没有任何编码问题,但我需要一些帮助来解释一个我正在努力寻找答案的概念。问题是: 你能让X类从Y类继承吗 类Y同时从类X继承?解释如何使用代码 一篇评论中已经提到:(公共)继承模式是一种“是”的关系 暂时忘记C++,考虑继承的抽象概念及其模型。如果A继承自B,则A的任何实例都是AB。因此,A的所有实例集是B的所有实例的子集。如果A的所有实例都是B的实例,而B的所有实例都是A的实例,则不需要继承来建模A和B之间的关系,因为它们是完全相同的类型 C++。这: struct A : B {};

我今天没有任何编码问题,但我需要一些帮助来解释一个我正在努力寻找答案的概念。问题是:

你能让X类从Y类继承吗
类Y同时从类X继承?解释如何使用代码

一篇评论中已经提到:(公共)继承模式是一种“是”的关系

暂时忘记C++,考虑继承的抽象概念及其模型。如果

A
继承自
B
,则
A
的任何实例都是A
B
。因此,
A
的所有实例集是
B
的所有实例的子集。如果
A
的所有实例都是
B
的实例,而
B
的所有实例都是
A
的实例,则不需要继承来建模
A
B
之间的关系,因为它们是完全相同的类型

<现在> C++。这:

 struct A : B {};
 struct B : A {};

这是不可能的,原因有二。首先,要使
A
继承自
B
必须知道
B
的定义,要使
B
继承自
A
必须知道
A
的定义。其次,
A
的每个实例都包含类型为
B
的子对象,每个
B
都包含类型为
A
A
的子对象。。。。无限的。这是不可能的。

继承是一种“是”的关系。你可以有“B是A”或“A是B”,但“A是A B是A是A是A是B是A…”怎么工作?你为什么要这样?还是这个问题只是理论上的?不是。在功能上,派生类的表示包括每个基类的表示。如果两个类相互继承,那么X的表示将包含Y的表示,Y的表示包含X的表示,“包含表示”关系将是无限递归的。这与
struct
类型不能直接或间接地包含其自身的完整实例的原因是一样的——这种关系是无限递归的。@churill这是课堂讨论的一部分,我只是对答案感兴趣