ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

多态

2021-06-18 02:05:51  阅读:182  来源: 互联网

标签:Square double 多态 Shape Circle include Rectangle


声明类Shape以及它的3个派生类:Circle、Square、Rectangle,用虚函数分别计算几种图形的面积、周长,编写程序,建立基类指针数组,每个指针均指向一个派生类对象,利用基类指针遍历元素对象,求取所有图形面积之和。请绘制UML类图。

 

 

 

  1 //Shape.h
  2 #ifndef _SHAPE_H_
  3 #define _SHAPE_H_
  4 
  5 class Shape
  6 {
  7 public:
  8     virtual double S()=0;
  9     virtual double C()=0;
 10 };
 11 #endif
 12 
 13 //Circle.h
 14 #include "Shape.h"
 15 
 16 class Circle:public Shape
 17 {
 18 public:
 19     Circle(double ir);
 20     double S();
 21     double C();
 22 private:
 23     double r;
 24 };
 25 
 26 //Circle.cpp
 27 #include "Circle.h"
 28 #include <iostream>
 29 #define PI 3.14
 30 
 31 using namespace std;
 32 
 33 Circle::Circle(double ir)
 34 {
 35     r=ir;
 36     cout<<"<construct a circle>"<<endl;
 37 }
 38 double Circle::S()
 39 {
 40     return (PI*r*r);
 41 }
 42 double Circle::C()
 43 {
 44     return (2*PI*r);
 45 }
 46 
 47 //Square.h
 48 #include "Shape.h"
 49 
 50 class Square:public Shape
 51 {
 52 public:
 53     Square(double ia);
 54     double S();
 55     double C();
 56 private:
 57     double a;
 58 };
 59 //Square.cpp
 60 #include "Square.h"
 61 #include <iostream>
 62 
 63 using namespace std;
 64 
 65 Square::Square(double ia)
 66 {
 67     a=ia;
 68     cout<<"<construct a square>"<<endl;
 69 }
 70 double Square::S()
 71 {
 72     return (a*a);
 73 }
 74 double Square::C()
 75 {
 76     return(4.0*a);
 77 }
 78 
 79 //Rectangle.h
 80 #include "Shape.h"
 81 
 82 class Rectangle:public Shape
 83 {
 84 public:
 85     Rectangle(double iw,double ih);
 86     double S();
 87     double C();
 88 private:
 89     double w;
 90     double h;
 91 };
 92 
 93 //Rectangle.cpp
 94 #include "Rectangle.h"
 95 #include <iostream>
 96 
 97 using namespace std;
 98 
 99 Rectangle::Rectangle(double iw,double ih)
100 {
101     w=iw;
102     h=ih;
103     cout<<"<construct a rectangle>"<<endl;
104 }
105 double Rectangle::S()
106 {
107     return (w*h);
108 }
109 double Rectangle::C()
110 {
111     return (2*(w+h));
112 }
113 
114 //main.cpp
115 #include <iostream>
116 #include "Circle.h"
117 #include "Square.h"
118 #include "Rectangle.h"
119 
120 using namespace std;
121 
122 int main()
123 {
124     int i=0;
125     double c,s;
126     double sum=0;
127 
128     Circle circle1(1);
129     Square square1(2);
130     Rectangle rectangle1(3,4);
131 
132     Shape * p[3];
133     p[0]=&circle1;
134     p[1]=&square1;
135     p[2]=&rectangle1;
136 
137     cout<<endl<<"Circle:"<<endl;
138     for(i=0;i<3;i++)
139     {
140         c=p[i]->C();
141         cout<<"c"<<i<<"="<<c<<endl;
142     }
143     cout<<endl<<"Square:"<<endl;
144     for(i=0;i<3;i++)
145     {
146         s=p[i]->S();
147         cout<<"s"<<i<<"="<<s<<endl;
148         sum+=s;
149     }
150     cout<<"total square="<<sum<<endl;
151     return 0;
152 }

 

 

1.error: redefinition of class Shape

使用宏定义防止头文件Shape.h被多次包含

#ifndef _SHAPE_H(有空格!否则unrecognized preprocessing directive:)

#define _SHAPE_H(有空格!)

class Shape {

    //......

};

#endif

  1. 定义指针数组

类型 * p[n];

 

标签:Square,double,多态,Shape,Circle,include,Rectangle
来源: https://www.cnblogs.com/satellite2021/p/14897948.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有