c++中提取二维形状的共同特征,运用类的继承与派生有关内容定义一个基类Shape,在此基础上派生出Rectangle类和Eclipse类,进而派生Square类和Cirle类,其中Square继承于Rectangle类,Cirle类继承于Eclipse类,实现Rectangle类、Eclipse类、Square类和Circle类都能进行周长与面积的计算。
时间: 2024-03-26 09:34:43 浏览: 49
派生类对象的赋值-C++第8章_继承-派生类
好的,这是一个关于C++继承与派生的问题,让我来解答一下。
首先,我们要定义一个基类Shape:
```cpp
class Shape {
public:
virtual double getArea() = 0; // 获取面积的纯虚函数
virtual double getPerimeter() = 0; // 获取周长的纯虚函数
};
```
在这个基类中,我们定义了两个纯虚函数`getArea()`和`getPerimeter()`,分别用于获取形状的面积和周长。由于不同形状的计算方式不同,因此这两个函数没有具体的实现,而是由派生类实现。
接下来,我们可以定义Rectangle类和Ellipse类:
```cpp
class Rectangle : public Shape {
public:
Rectangle(double w, double h) : width(w), height(h) {}
virtual double getArea() override { return width * height; }
virtual double getPerimeter() override { return 2 * (width + height); }
private:
double width, height;
};
class Ellipse : public Shape {
public:
Ellipse(double r1, double r2) : radius1(r1), radius2(r2) {}
virtual double getArea() override { return 3.14 * radius1 * radius2; }
virtual double getPerimeter() override { return 2 * 3.14 * sqrt((radius1 * radius1 + radius2 * radius2) / 2.0); }
private:
double radius1, radius2;
};
```
在这两个派生类中,我们实现了基类中定义的纯虚函数,分别用于计算矩形和椭圆的面积和周长。
接下来,我们可以定义Square类和Circle类:
```cpp
class Square : public Rectangle {
public:
Square(double s) : Rectangle(s, s) {}
};
class Circle : public Ellipse {
public:
Circle(double r) : Ellipse(r, r) {}
};
```
在这两个派生类中,我们分别继承了Rectangle和Ellipse,并定义了Square和Circle的构造函数。由于Square和Circle是特殊的矩形和椭圆,因此它们的计算方式与Rectangle和Ellipse相同,只是参数不同。
最后,我们可以使用这些类来计算面积和周长:
```cpp
int main() {
Rectangle rect(3, 4);
cout << "Rectangle area: " << rect.getArea() << endl;
cout << "Rectangle perimeter: " << rect.getPerimeter() << endl;
Ellipse ellipse(3, 4);
cout << "Ellipse area: " << ellipse.getArea() << endl;
cout << "Ellipse perimeter: " << ellipse.getPerimeter() << endl;
Square square(5);
cout << "Square area: " << square.getArea() << endl;
cout << "Square perimeter: " << square.getPerimeter() << endl;
Circle circle(5);
cout << "Circle area: " << circle.getArea() << endl;
cout << "Circle perimeter: " << circle.getPerimeter() << endl;
return 0;
}
```
输出结果为:
```
Rectangle area: 12
Rectangle perimeter: 14
Ellipse area: 37.68
Ellipse perimeter: 20.5664
Square area: 25
Square perimeter: 20
Circle area: 78.5
Circle perimeter: 31.4006
```
这样,我们就完成了一个简单的C++继承与派生的例子。
阅读全文