(1)定义一个类location,用数据成员x、y表示该类对象在二维坐标系中的坐标位置,用成员函数move改变对象坐标位置,成员函数draw显示坐标值。 (2)以类location为基类,派生出点类point,重载成员函数move改变对象坐标位置,成员函数draw显示坐标点到原点的位移。 (3)再利用点类point派生出圆类circle,用数据成员r表示圆的半径,成员函数move改变对象半径和坐标,成员函数draw显示圆的面积。 在主函数中定义各类的对象并调用成员函数以测试功能。
时间: 2024-03-23 19:35:55 浏览: 57
以下是实现上述功能的代码:
```c++
#include <iostream>
#include <cmath>
using namespace std;
class Location {
protected:
double x, y;
public:
Location(double x, double y) {
this->x = x;
this->y = y;
}
void move(double dx, double dy) {
x += dx;
y += dy;
}
void draw() {
cout << "x = " << x << ", y = " << y << endl;
}
};
class Point : public Location {
public:
Point(double x, double y) : Location(x, y) {}
void move(double dx, double dy) {
Location::move(dx, dy);
}
void draw() {
double distance = sqrt(x * x + y * y);
cout << "distance to origin = " << distance << endl;
}
};
class Circle : public Point {
private:
double r;
public:
Circle(double x, double y, double r) : Point(x, y) {
this->r = r;
}
void move(double dx, double dy) {
Point::move(dx, dy);
r += dx + dy;
}
void draw() {
double area = 3.14 * r * r;
cout << "area of circle = " << area << endl;
}
};
int main() {
Location* l = new Location(1, 2);
l->draw();
l->move(3, 4);
l->draw();
Point* p = new Point(3, 4);
p->draw();
p->move(1, 1);
p->draw();
Circle* c = new Circle(5, 6, 2);
c->draw();
c->move(2, 3);
c->draw();
delete l;
delete p;
delete c;
return 0;
}
```
在上述代码中,我们先定义了一个基类Location,其中包含了x和y两个数据成员以及move和draw两个成员函数。然后,我们以Location为基类派生出了一个点类Point,并重载了它的move和draw函数。最后,我们再以点类Point为基类派生出了圆类Circle,并再次重载了它的move和draw函数。
在主函数中,我们分别定义了三个对象,分别是一个Location,一个Point,和一个Circle,并测试了它们的各个成员函数的功能。
阅读全文
相关推荐


















