我在C++中练习继承,我有一些构造函数问题。C++继承:子类实例同时使用子和父构造函数
当我创建的子类(圈子)的一个实例,它创建了两个孩子和家长的一个实例。还是呢?
我想只创建一个圆的实例,而不是形状和圆。
如果我删除:从圈的构造形状(0,0),然后我得到的错误:“没有默认构造函数存在类Shape”
你总是必须引用父类的构造?那意味着父母的构造函数总是被调用?这是否意味着有一个孩子和父母的实例?
子类:
#include "Circle.h"
#include <iostream>
using namespace std;
Circle::Circle(float radius) : Shape(0.0, 0.0) {
this->radius = radius;
}
float Circle::computeArea() {
cout << "Circle area is " << (3.14 * radius * radius) << "\n";
return float(3.14 * radius * radius);
}
父包:
#include "Shape.h"
#include <iostream>
using namespace std;
Shape::Shape(float base, float height) {
this->base = base;
this->height = height;
cout << "Shape: base - " << base << " height - " << height << "\n";
}
float Shape::computeArea() {
cout << "Area is " << base*height << "\n";
return base * height;
}
主要包:
#include "Circle.h"
#include "Square.h"
#include <iostream>
using namespace std;
int main() {
Square mySquare(10.0, 10.0);
Circle myCircle(5.0);
float squareArea = mySquare.computeArea();
float circleArea = myCircle.computeArea();
cout << "done";
return 0;
}
输出:
Shape: base - 10 height - 10
Shape: base - 0 height - 0
area is 100
circle area is 78.5
done
那么问题是什么? – Slava
如果你感到惊讶'Shape'的构造函数被调用,那么,你认为你在这里做什么:'Circle :: Circle(float radius):Shape(0.0,0.0)'? (一个派生类*(也)是一个父类,并且必须构建其本身的“父”部分,因此在其构造函数中调用其构造函数) – Caninonos
因此,当从父类继承时,总是创建父类的实例孩子? – Spectrem