标签:
/* 题目63:编写C++程序完成以下功能: (1)声明一个纯虚函数类Shape(形状),其中包含来计算面积、计算周长的方法; (2)从Shape派生两个类矩形和圆形; (3)从矩形派生正方形; (4)分别实现派生类构造函数、析构函数和其他方法; (5)创建派生类的对象,观察构造函数、析构函数调用次序; (6)利用抽象类做函数参数(基类指针指向子类对象,多态特性),计算不同对象的面积和周长。 */ #define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; #define PI 3.14 //形状类 class Shape{ public: //计算面积 virtual double ComputeArea() = 0; //计算周长 virtual double ComputePerimeter() = 0; //返回名称 virtual char* PrintName() = 0; }; //圆类 class Circle :public Shape{ public: Circle(int r){ this->r = r; } virtual char* PrintName(){ return "圆"; } //计算面积 virtual double ComputeArea(){ return PI*r*r; } //计算周长 virtual double ComputePerimeter(){ return 2* PI*r; } private: int r; }; //矩形类 class Rectangle :public Shape{ public: Rectangle(int w,int h){ width = w; height = h; } virtual char* PrintName(){ return "矩形"; } //计算面积 virtual double ComputeArea(){ return width*height; } //计算周长 virtual double ComputePerimeter(){ return 2 * (width+height); } protected: int width; int height; }; //正方形类 class Square :public Rectangle{ public: Square(int edge) :Rectangle(edge, edge){} virtual char* PrintName(){ return "正方形"; } }; void ProtectA(Shape *sp){ printf("%s的面积是%f\n", sp->PrintName(), sp->ComputeArea()); printf("%s的周长是%f\n", sp->PrintName(), sp->ComputePerimeter()); } void main(){ //定义圆对象 Circle c1(1); ProtectA(&c1); //定义矩形对象 Rectangle r1(2, 3); ProtectA(&r1); //定义正方形对象 Square sq1(5); ProtectA(&sq1); printf("程序执行完毕!\n"); system("pause"); }
标签:
原文地址:http://www.cnblogs.com/zhanggaofeng/p/5658556.html