1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
| #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> using namespace std;
class Shape { public: virtual double getArea() = 0;
virtual void print() = 0; };
class Circle :public Shape { public: Circle(double r) { this->r = r; }
virtual double getArea() { return 3.14 * r * r; }
virtual void print() { cout << "圆的面积是" << endl; cout << this->getArea() << endl; } private: double r; };
class Rect :public Shape { public: Rect(double a) { this->a = a; } virtual double getArea() { return a*a; }
virtual void print() { cout << "正方形的面积是" << endl; cout << this->getArea() << endl; } private: double a; };
class Tri :public Shape { public: Tri(double a, double h) { this->a = a; this->h = h; } virtual double getArea() { return 0.5 * h * a; }
virtual void print() { cout << "三角形的面积是" << endl; cout << this->getArea() << endl; }
private: double a; double h; };
void printArea(Shape *p) { p->print(); }
int main(void) {
Shape *sp = new Circle(10.0);
printArea(sp);
delete sp;
sp = new Rect(10.0);
printArea(sp); delete sp;
Shape *sp2 = new Tri(10, 20); sp2->print(); delete sp2;
cout << " ------ " << endl;
return 0; }
|