C++ c+中具有继承性的构造函数+;
如果有3个类,箭头从父类指向子类(即“A->B”表示“B从A继承”: 我得到一个编译错误: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
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) {}