当前位置:
首页 >
C++ 形状类继承
发布时间:2025/5/22
74
豆豆
题目描述
声明一个 形状(Shape) 抽象类,由其派生出点(Point)类,和直线(Line) 类,三个类均有成员函数Draw(),其中Shape类的Draw()为纯虚函数。给出的主函数在输出样例之后。
输入描述
输入一个不大于100的正整数n,接下来n组数据。
每组数据先输入字符"p"或"l"。如果输入"p",则接下来输入2个正整数为点的坐标;如果输入"l",则接下来输入4个正整数为直线两个端点的坐标
输出描述
依次输出所有点和直线
输入样例
3 p 1 2 l 5 6 7 8 p 3 4输出样例
Draw a point (1,2) Draw a line (5,6) to (7,8) Draw a point (3,4) 主函数如下: int main(){ Shape *p[100]; int x1,y1,x2,y2,n=0;char c;cin>>n;for(int i=0;i<n;i++){cin>>c;if(c=='p'){cin>>x1>>y1;p[i]=new Point(x1,y1);}else if(c=='l'){cin>>x1>>y1>>x2>>y2;Point p1(x1,y1),p2(x2,y2);p[i]=new Line(p1,p2);}}for(int i=0;i<n;i++){p[i]->Draw(); delete p[i];} }程序代码
#include <iostream>using namespace std;class Shape{ // 抽象类 public: virtual void Draw() = 0; // 纯虚函数 };class Point:public Shape{public: Point(int a, int b):x(a), y(b){}void Draw(){cout << "Draw a point(" << x << "," << y << ")\n"; }friend ostream& operator << (ostream& o, Point& p);~Point(){}private:int x, y; };ostream& operator<<(ostream& o, Point& p){o << "(" << p.x << "," << p.y << ")";return o << endl; }class Line:public Shape{public:Line(Point& aa, Point& bb):a(aa), b(bb){}void Draw(){cout << "Draw a line" << a << "to" << b << endl;}~Line(){} private:Point a, b; };int main(){ Shape *p[100]; int x1, y1, x2, y2, n = 0;char c;cin >> n;for(int i = 0; i < n; i++){cin >> c;if(c == 'p'){cin >> x1 >> y1;p[i] = new Point(x1, y1);} else if (c == 'l'){cin >> x1 >> y1 >> x2 >> y2;Point p1(x1, y1), p2(x2, y2);p[i] = new Line(p1, p2);}}for(int i = 0;i < n; i++){p[i] -> Draw(); delete p[i];} }总结
- 上一篇: STC89C52单片机 LCD1602液
- 下一篇: C++ 平面点类