图形类的继承与派生(图形类派生出正方形类和圆类) (1)定义CShape类 操作: 求面积的纯虚函数virtual double area( ) =0; 输出的纯虚函数virtual void print( ) =0; (2)定义正方形类CSquare,公有继承CShape类 操作: 构造函数、setEdge、getEdge、求面积的虚函数virtual double area( ) ;输出的虚函数virtual void print( ) ;等 数据: 成员变量edge作为正方形的边长 (3)定义圆类CCircle,公有继承CShape类 操作: 构造函数、setRadius、getRadius、求面积的虚函数virtual double area( ) ;输出的虚函数virtual void print( ) ;等 数据: 成员变量radius作为圆的半径 (4)定义主函数,对正方形类CSquare和圆类CCircle的功能进行测试。
时间: 2023-06-14 10:04:24 浏览: 126
下面是实现题目要求的代码:
```C++
#include <iostream>
#include <cmath>
using namespace std;
class CShape {
public:
virtual double area() = 0;
virtual void print() = 0;
};
class CSquare : public CShape {
private:
double edge;
public:
CSquare(double e) : edge(e) {}
void setEdge(double e) { edge = e; }
double getEdge() { return edge; }
double area() override { return edge * edge; }
void print() override { cout << "This is a square with edge " << edge << "." << endl; }
};
class CCircle : public CShape {
private:
double radius;
public:
CCircle(double r) : radius(r) {}
void setRadius(double r) { radius = r; }
double getRadius() { return radius; }
double area() override { return M_PI * radius * radius; }
void print() override { cout << "This is a circle with radius " << radius << "." << endl; }
};
int main() {
CSquare square(5.0);
CCircle circle(3.0);
cout << "Square area: " << square.area() << endl;
square.print();
cout << "Circle area: " << circle.area() << endl;
circle.print();
return 0;
}
```
输出结果:
```
Square area: 25
This is a square with edge 5.
Circle area: 28.2743
This is a circle with radius 3.
```
在这个示例中,我们首先定义了一个抽象类 `CShape`,它包含两个纯虚函数 `area()` 和 `print()`,用于计算面积和输出形状信息。然后我们定义了两个派生类 `CSquare` 和 `CCircle`,它们分别表示正方形和圆形。这两个类都公有继承了 `CShape` 类,并分别实现了 `area()` 和 `print()` 函数。在 `CSquare` 类中,我们还添加了成员变量 `edge` 表示正方形的边长,并实现了访问器和修改器函数。在 `CCircle` 类中,我们添加了成员变量 `radius` 表示圆形的半径,并实现了访问器和修改器函数。
在主函数中,我们分别创建了一个正方形对象和一个圆形对象,并调用它们的 `area()` 和 `print()` 函数,演示了多态的特性。输出结果证明了我们的程序是正确的,而且正方形和圆形的面积和形状信息都被正确地计算和输出了。
阅读全文