14.利用虚函数实现多态性来求正方体、球体和圆柱体的表面积和体积。
具体要求如下,
从正方体、球体和圆柱体的各种运算中抽象出一个公共基类container为抽象类,
在其中定义求表面积和体积的纯虚函数(该抽象类本身是没有表面积和体积可言的)。
在抽象类中定义一个公共的数据成员radius,此数据可作为球的半径、正方体的边长、圆柱体底面圆半径。
由此抽象类派生出要描述的3个类,即cube、snhere和cvlinder,在这3个类中都具有求表面积和体积的重定义版本。
#include<iostream> using namespace std; #define pi 3.14 class container { protected: double radius; public: container(double a) :radius(a) {} virtual double getbiaomianji() = 0; virtual double gettiji() = 0; virtual void show1() = 0;//display->表面积 virtual void show2() = 0;//display->体积 }; class cube:public container { public: cube(double c) :container(c) {} double getbiaomianji() { return this->radius * this->radius * pi*4; } double gettiji() { return this->radius * this->radius * pi * 4 / 3; } void show1() { cout << "球的表面积为:\t" << this->getbiaomianji() << endl; } void show2() { cout << "球的体积为:\t" << this->gettiji() << endl; } }; class snhere:public container { public: snhere(double s) :container(s) {} double getbiaomianji() { return this->radius * this->radius *6; } double gettiji() { return this->radius * this->radius *this->radius; } void show1() { cout << "正方体的表面积为:\t" << this->getbiaomianji() << endl; } void show2() { cout << "正方体的体积为:\t" << this->gettiji() << endl; } }; class cvlinder:public container { protected: double height; public: cvlinder(double a, double b) :container(a), height(b) {} double getbiaomianji() { return this->radius * this->radius *pi*2 + this->radius* 2 * pi * height; } double gettiji() { return this->radius * this->radius * pi*height; } void show1() { cout << "圆柱的表面积为:\t" << this->getbiaomianji() << endl; } void show2() { cout << "圆柱的体积为:\t" << this->gettiji() << endl; } }; int main() { double a, b; cin >> a; cube cu(a); container& co = cu; co.show1(); co.show2(); cout << "----" << endl; cin >> a; snhere sn(a); container* con = &sn; con->show1(); con->show2(); cout << "----" << endl; cin >> a >> b; cvlinder cv(a, b); cv.show1(); cv.show2(); system("pause"); }