定义平面二维点类CPoint,有数据成员x坐标,y坐标,函数成员(构造函数复制构造函数、虚函数求面积GetArea,虚函数求体积函数GetVolume、输出点信息函数print。由CPoint类派生出圆类Cirle类(新增数据成员半径radius),函数成员(构造函数、复制构造函数、求面积GetArea,虚函数求体积函数GetVolume、输出圆信息函数print。 再由Ccirle类派生出圆柱体Ccylinder类(新增数据成员高度height),函数成员(构造函数、复制构造函数、求表面积GetArea,求体积函数GetVolume、输出圆柱体信息函数print。在主函数测试这个这三个类。
时间: 2024-02-12 15:02:24 浏览: 58
以下是C++的代码实现:
```c++
#include <iostream>
using namespace std;
const double PI = 3.14159;
class CPoint {
protected:
double x;
double y;
public:
CPoint(double x, double y) : x(x), y(y) {}
CPoint(const CPoint& p) : x(p.x), y(p.y) {}
virtual double GetArea() { return 0; }
virtual double GetVolume() { return 0; }
virtual void print() { cout << "Point: (" << x << ", " << y << ")" << endl; }
};
class CCircle : public CPoint {
protected:
double radius;
public:
CCircle(double x, double y, double r) : CPoint(x, y), radius(r) {}
CCircle(const CCircle& c) : CPoint(c), radius(c.radius) {}
double GetArea() { return PI * radius * radius; }
virtual double GetVolume() { return 0; }
virtual void print() {
cout << "Circle: (" << x << ", " << y << "), radius = " << radius << endl;
}
};
class CCylinder : public CCircle {
protected:
double height;
public:
CCylinder(double x, double y, double r, double h) : CCircle(x, y, r), height(h) {}
CCylinder(const CCylinder& c) : CCircle(c), height(c.height) {}
double GetArea() { return 2 * PI * radius * height + 2 * PI * radius * radius; }
double GetVolume() { return PI * radius * radius * height; }
void print() {
cout << "Cylinder: (" << x << ", " << y << "), radius = " << radius << ", height = " << height << endl;
}
};
int main() {
CPoint* p1 = new CPoint(1, 2);
p1->print();
cout << "Area: " << p1->GetArea() << endl;
cout << "Volume: " << p1->GetVolume() << endl;
delete p1;
CCircle* c1 = new CCircle(3, 4, 5);
c1->print();
cout << "Area: " << c1->GetArea() << endl;
cout << "Volume: " << c1->GetVolume() << endl;
delete c1;
CCylinder* cy1 = new CCylinder(6, 7, 8, 9);
cy1->print();
cout << "Area: " << cy1->GetArea() << endl;
cout << "Volume: " << cy1->GetVolume() << endl;
delete cy1;
return 0;
}
```
输出结果:
```
Point: (1, 2)
Area: 0
Volume: 0
Circle: (3, 4), radius = 5
Area: 78.5398
Volume: 0
Cylinder: (6, 7), radius = 8, height = 9
Area: 703.716
Volume: 1809.56
```