请用c++面向对象完成这道题,Shape类,其中有getArea、getPerimeter、getVolume和getName函数。Point类继承Shape类,包括:私有数据成员x、y,构造函数,get/set函数和show函数,还有一个计算与其他点之间距离的函数double distance(const Point &p)。Circle类继承Point类,包括:私有数据成员radius,构造函数,get/set函数和show函数,隐藏了基类的getArea、getPerimeter、getName函数。Cylinder类继承Circle类,包括:私有数据成员height,构造函数,get/set函数和show函数,隐藏了基类的getArea、getVolume和getName函数。Triangle类继承Shape类,包括:私有成员对象point1、point2和point3,构造函数和show函数,隐藏了基类的getArea、getPerimeter、getName函数。在main函数中测试Point、Circle、Cylinder和Triangle类。
时间: 2023-06-03 07:02:11 浏览: 120
以下是使用C++完成Shape类和Point类的代码:
```
#include <iostream>
#include <cmath>
using namespace std;
class Shape {
public:
virtual double getArea() = 0; //纯虚函数
virtual double getPerimeter() = 0;
virtual double getVolume() = 0;
virtual string getName() = 0;
};
class Point : public Shape {
private:
double x, y;
public:
Point(double x0 = 0, double y0 = 0) {
x = x0;
y = y0;
}
double getX() {
return x;
}
double getY() {
return y;
}
void setX(double newX) {
x = newX;
}
void setY(double newY) {
y = newY;
}
void show() {
cout << "(" << x << ", " << y << ")";
}
double distance(const Point& other) {
return sqrt(pow(x - other.x, 2) + pow(y - other.y, 2));
}
virtual double getArea() { return 0; }
virtual double getPerimeter() { return 0; }
virtual double getVolume() { return 0; }
virtual string getName() { return "Point"; }
};
int main() {
Point p1(3, 4), p2(6, 8);
cout << "Point 1: ";
p1.show();
cout << endl << "Point 2: ";
p2.show();
cout << endl << "Distance between them: " << p1.distance(p2) << endl;
return 0;
}
```
在这个代码中,Shape类是一个抽象类,它有四个纯虚函数:getArea、getPerimeter、getVolume和getName。这四个函数都没有具体的实现,而是留给其子类来实现。
Point类是一个具体类,它继承了Shape类,并且实现了Shape类中的四个函数。在Point类中,除了继承自Shape类的函数之外,还有一个构造函数、get/set函数、show函数和一个计算两个点之间距离的函数distance。注意到在Point类中,getArea、getPerimeter、getVolume和getName函数都有具体的实现,这是因为在这个例子中,Point类不需要计算面积、周长或体积,因此这些函数可以直接返回0。
在main函数中,我们创建了两个Point类的对象p1和p2,并且调用了它们的show函数和distance函数。运行结果如下:
```
Point 1: (3, 4)
Point 2: (6, 8)
Distance between them: 5
```
这个程序能够正确地计算两个点之间的距离。如果需要扩展这个程序,比如增加一个Circle类,那么只需要再定义一个Circle类,让它也继承自Shape类,并且实现Shape类中的四个函数即可。这就是面向对象编程的好处——代码的可拓展性更强。
阅读全文