Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/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+中具有继承性的构造函数+;_C++_Inheritance_Constructor - Fatal编程技术网

C++ c+中具有继承性的构造函数+;

C++ c+中具有继承性的构造函数+;,c++,inheritance,constructor,C++,Inheritance,Constructor,如果有3个类,箭头从父类指向子类(即“A->B”表示“B从A继承”: 我得到一个编译错误: illegal member initialization: 'Shape' is not a base or member 所以我不确定我的代码是合法的还是最佳实践,或者你会让中产阶级做顶级Shape类做的事情 TwoDimensionalShape::TwoDimensionalShape(int x, int y) : Shape (x, y) {} 然后在圆圈课上 Circle::Circl

如果有3个类,箭头从父类指向子类(即“A->B”表示“B从A继承”:

我得到一个编译错误:

 illegal member initialization: 'Shape' is not a base or member
所以我不确定我的代码是合法的还是最佳实践,或者你会让中产阶级做顶级Shape类做的事情

TwoDimensionalShape::TwoDimensionalShape(int x, int y) : Shape (x, y) {}
然后在圆圈课上

Circle::Circle(int x, int y, int r) : TwoDimensionalShape(x, y), r(r) {}

Shape2d类的构造函数应该调用Shape的构造函数。Circle类的构造函数应该调用Shape2d的构造函数。

Shape2d类的构造函数应该调用Shape的构造函数。Circle类的构造函数应该调用Shape2d的构造函数。

是的,正如您在文章末尾指出的那样post,类构造函数只能调用其直接父类的构造函数,不能“跳过”类并初始化父类的父类。

是的,正如您在文章末尾指出的,类构造函数只能调用其直接父类的构造函数,不能“跳过”类并初始化父类的父类。

对于非虚拟继承,只能调用父类的构造函数


构造祖父母(或曾祖父母等)的唯一时间是使用虚拟继承。

对于非虚拟继承,只能调用父类的构造函数


构建祖父母(或曾祖父母等)的唯一时间是使用虚拟继承。

您需要显示类声明(不需要包含成员,但至少要包含DECL及其继承结构)。听起来你在圆的声明中缺少了形状的子类化。你需要显示类声明(不需要包括成员,但至少包括DECL及其继承结构)。听起来你在圆的声明中缺少了形状的子类化。
TwoDimensionalShape::TwoDimensionalShape(int x, int y) : Shape (x, y) {}
Circle::Circle(int x, int y, int r) : TwoDimensionalShape(x, y), r(r) {}