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类。【主程序】//main.cpp #include<iostream>#include<string>usingnamespace std; #include"point.h"#include"circle.h"#include"cylinder.h"#include"triangle.h"int main() { Point point(7, 11); Circle circle(22, 8, 3.5); Cylinder cylinder(10, 10, 3.3, 10); Point p1(1,1), p2(5,1), p3(1,4);Triangle triangle(p1, p2, p3); cout << point.getName() <<":" ;point.show();cout <<"Area = "<< point.getArea(); cout <<" Perimeter = "<< point.getPerimeter(); cout <<" Volume = "<< point.getVolume() << endl<<endl; cout << circle.getName() <<":" ; circle.sho
时间: 2023-06-03 11:02:09 浏览: 131
Shape类是一个基类,其中包含了一些虚函数,包括getArea、getPerimeter、getVolume和getName函数,这些函数在子类中可以被重写。Point类继承了Shape类,它包括了私有数据成员x、y,构造函数,get/set函数和show函数。此外,它还有一个计算与其他点之间距离的函数double distance(const Point &p),这个函数可以计算两个点之间的欧几里得距离。通过继承Shape类,Point类可以在计算距离的同时,自动继承一些基本的形状函数,比如计算面积和周长等。
相关问题
请用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类。
以下是使用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类中的四个函数即可。这就是面向对象编程的好处——代码的可拓展性更强。
用C++编写程序。具体功能如下: (1)Shape类,其中有getArea、getPerimeter、getVolume和getName函数,具有name私有成员变量。 (2)Point类继承Shape类,包括:私有数据成员x、y,构造函数,get/set函数
以下是代码实现:
```c++
#include <iostream>
#include <string>
using namespace std;
class Shape {
private:
string name;
public:
Shape(string n) {
name = n;
}
virtual double getArea() = 0;
virtual double getPerimeter() = 0;
virtual double getVolume() = 0;
string getName() {
return name;
}
};
class Point : public Shape {
private:
double x, y;
public:
Point(string n, double x_, double y_) : Shape(n) {
x = x_;
y = y_;
}
void setX(double x_) {
x = x_;
}
void setY(double y_) {
y = y_;
}
double getX() {
return x;
}
double getY() {
return y;
}
double getArea() {
return 0;
}
double getPerimeter() {
return 0;
}
double getVolume() {
return 0;
}
};
int main() {
Point p1("Point 1", 1, 2);
Point p2("Point 2", 3, 4);
cout << p1.getName() << ": (" << p1.getX() << ", " << p1.getY() << ")" << endl;
cout << p2.getName() << ": (" << p2.getX() << ", " << p2.getY() << ")" << endl;
p1.setX(5);
p1.setY(6);
cout << p1.getName() << ": (" << p1.getX() << ", " << p1.getY() << ")" << endl;
return 0;
}
```
在这个程序中,Shape类是一个抽象类,其中包含一个纯虚函数getArea、getPerimeter、getVolume和getName函数,还有一个私有成员变量name。Point类继承自Shape类,包括私有数据成员x、y和构造函数、get/set函数。在Point类中,纯虚函数getArea、getPerimeter、getVolume被实现为返回0,因为一个点没有面积、周长和体积。
在主函数中,我们可以创建两个Point对象p1和p2,并使用getX和getY函数获取它们的x和y坐标。我们还可以使用setX和setY函数更改p1的坐标,并使用getName函数获取p1和p2的名称。
阅读全文