10.3修改

来源:互联网 发布:arp查看mac 编辑:程序博客网 时间:2024/04/28 14:55
//扩展程序:创建一个三角形类//修改create_object函数,使得程序支持三角形的创建//和求面积、打印等操作#include <iostream>using namespace std;class Shape {public:virtual double getArea() const = 0;virtual void print() const = 0;virtual ~Shape(){}};class Circle : public Shape {public:Circle(int = 0, int = 0, double = 0.0);virtual double getArea() const;   // 返回面积virtual void print() const;  // 输出Circle 类对象tprivate:int x, y;        // 圆心座标double radius;  // 圆半径}; // 派生类Circle定义结束class Rectangle : public Shape {public:Rectangle(int = 0, int = 0);  // 构造函数virtual double getArea() const;   // 返回面积void print() const;  // 输出Rectangle类对象protected:int a, b;       // 矩形的长和宽}; // 派生类double Shape::getArea() const{cout << "基类的getArea函数,面积是 ";return 0.0;}  // Shape类getArea函数的定义class Sanjiao : public Shape {public:Sanjiao(double cValue, double dValue);virtual double getArea() const;   // 返回面积virtual void print() const;  // 输出Circle 类对象tprivate:double c, d;        // 底,高};//double Shape::getArea() const//{//cout << "基类的getArea函数,面积是 ";//return 0.0;//}void Shape::print() const{cout << "Base class Object" << endl;}//Shape类print函数定义Circle::Circle(int xValue, int yValue, double radiusValue){x = xValue;  y = yValue;radius = radiusValue;} // Circle类构造函数double Circle::getArea() const{cout << "Circle类的getArea函数,面积是 ";return 3.14159 * radius * radius;} // Circle类getArea函数定义void Circle::print() const{cout << "center is ";cout << "x=" << x << "   y=" << y;cout << "; radius is " << radius << endl;} // Circle类print函数定义Rectangle::Rectangle(int aValue, int bValue){a = aValue;  b = bValue;} // Rectangle类构造函数double Rectangle::getArea() const{cout << "Rectangle类的getArea函数,面积是 ";return a * b;}       // Rectangle类getArea函数定义void Rectangle::print() const{cout << "hight is " << a;cout << "width is" << b << endl;}Sanjiao::Sanjiao(double cValue, double dValue){c = cValue;  d = dValue;}                           // Rectangle类构造函数double Sanjiao::getArea() const{cout << "Sanjiao类的getArea函数,面积是 ";return  0.5*c * d;}       // Rectangle类getArea函数定义void Sanjiao::print() const{cout << "hight is " << c;cout << "bottom is " << d << endl;}class Cube : public Rectangle {//派生类Cube的定义public:Cube(int x = 0, int y = 0, int z = 0) :Rectangle(x, y), c(z){};double getArea() const;void print() const;private:int c;};double Cube::getArea() const{return a*b*c;}void Cube::print() const{cout << "Cube:h=" << c << ",length=" << a<< ",width=" << b << ",Area=" << a*b*c << endl;}void creat_object(Shape **ptr){char type;*ptr = NULL;//空指针do{cout << "创建对象。请选择:";cout << "c:Circle类对象;r:Rectangle类对象;u:Cube类对象;s:Sanjiao类对象" << endl;cin >> type;switch (type){case 'c'://创建Ciecle类对象{int xx, yy;double rr;cout << "请输入圆心的座标和圆的半径:";cin >> xx >> yy >> rr;*ptr = new Circle(xx, yy, rr);break;}case 'r'://创建Rectangle类对象 {int aa, bb;cout << "请输入矩形的长和宽:";cin >> aa >> bb;*ptr = new Rectangle(aa, bb);}break;case 'u'://创建Cube类对象 {int aa, bb, cc;cout << "请输入立方体的长、宽、高:";cin >> aa >> bb >> cc;*ptr = new Cube(aa, bb, cc);}break;case 's'://创建Sanjiao类对象 {double cc, dd;cout << "请输入三角形的底、高:";cin >> cc >> dd;*ptr = new Sanjiao(cc, dd);}break;default:cout << "类型错误,请重新选择\n";}} while (*ptr == NULL);}void display_area(Shape *ptr){cout << "显示所创建对象的面积,调用的是" << endl;cout << ptr->getArea() << endl;}void delete_object(Shape *ptr){delete(ptr);}int main(){Shape *shape_ptr;creat_object(&shape_ptr);display_area(shape_ptr);delete_object(shape_ptr);return 0;}

0 0
原创粉丝点击