用C++实现以下功能。由基类Point公有派生出Line、Circle 类,其结构如下: 需要对Line、Circle 类新增加保护数据成员 Line::int x1,y1; // 直线的另外一个点 Circle::int x2,y2; // 圆的另外一个点,两点间距作为圆直径 Line、Circle 类的构造函数实现对基类的参数传递 重载成员函数设置点的坐标值 void Line::SetXY(int m,int n,int l, int k); void Circle::SetXY(int m,int n,int l, int k); 成员函数绘制当前图形 void Line::Draw( ); //输出字符串“Line : (x,y)——(x1,y1)”表示当前图形是直线 void Circle::Draw( ); //输出字符串“Circle : (x,y)——(x1,y1)”表示当前图形是圆
时间: 2024-03-24 12:41:22 浏览: 85
C++实现vector。构造Constructors,析构,运算符重载operators,vector迭代器实现,assign等
以下是C++实现代码:
```c++
#include <iostream>
using namespace std;
class Point {
protected:
int x, y;
public:
Point(int x = 0, int y = 0) : x(x), y(y) {}
void SetXY(int x, int y) { this->x = x; this->y = y; }
int GetX() { return x; }
int GetY() { return y; }
};
class Line : public Point {
protected:
int x1, y1;
public:
Line(int x1 = 0, int y1 = 0, int x2 = 0, int y2 = 0) : Point(x2, y2), x1(x1), y1(y1) {}
void SetXY(int x1, int y1, int x2, int y2) { this->x1 = x1; this->y1 = y1; Point::SetXY(x2, y2); }
void Draw() { cout << "Line: (" << x << "," << y << ")---(" << x1 << "," << y1 << ")" << endl; }
};
class Circle : public Point {
protected:
int x2, y2;
public:
Circle(int x = 0, int y = 0, int x2 = 0, int y2 = 0) : Point(x, y), x2(x2), y2(y2) {}
void SetXY(int x, int y, int x2, int y2) { Point::SetXY(x, y); this->x2 = x2; this->y2 = y2; }
void Draw() { cout << "Circle: (" << x << "," << y << ")---(" << x2 << "," << y2 << ")" << endl; }
};
int main() {
Line line;
line.SetXY(1, 2, 3, 4);
line.Draw();
Circle circle;
circle.SetXY(5, 6, 7, 8);
circle.Draw();
return 0;
}
```
在以上代码中,我们定义了一个基类Point,其中包含了点的坐标信息,并且我们将其定义为protected,以便派生类可以继承和使用。
然后我们定义了两个派生类Line和Circle,它们都包含了两个另外一个点的坐标信息。我们在派生类中新增加了两个保护数据成员,分别为Line的x1和y1,Circle的x2和y2。
接着我们对Line和Circle的构造函数进行了重载,并且在构造函数中实现了对基类Point的参数传递。
然后我们重载了SetXY函数,以便派生类可以设置自己的坐标信息。
最后我们在派生类中实现了Draw函数,用于绘制当前的图形,并且输出相应的字符串表示当前图形是直线还是圆。
在主函数中,我们定义了一个Line对象和一个Circle对象,并且分别设置它们的坐标信息。然后分别调用它们的Draw函数,输出相应的字符串。
阅读全文