#include <iostream> using namespace std; const double pi = 3.1415926; class CSolid { public: virtual double area() const = 0; virtual double volume() const = 0; }; class CCube:public CSolid { public: CCube(double l):len(l){} ~CCube(); double area() const; double volume() const; private: double len; }; class CBall:public CSolid { public: CBall(double r):rang(r){} ~CBall(); double area() const; double volume() const; private: double rang; }; class CCylinder:public CSolid { public: CCylinder(double R,double h):Rang(R),high(h){} ~CCylinder(); double area() const; double volume() const; private: double Rang; double high; }; CCube::~CCube(){} double CCube::area() const { return 6*len*len; } double CCube::volume() const { return len*len*len; } CBall::~CBall(){} double CBall::area() const { return 4*pi*rang*rang; } double CBall::volume() const { return 1.33*pi*rang*rang*rang; } CCylinder::~CCylinder(){} double CCylinder::area() const { return 2*pi*Rang*high+2*pi*Rang*Rang; } double CCylinder::volume() const { return pi*Rang*Rang*high; } int main( ) { CSolid *p; double s,v; CCube x(30); cout<<"立方体边长为30"<<endl; p=&x; s=p->area( ); v=p->volume( ); cout<<"表面积:"<<s<<endl; cout<<"体积:"<<v<<endl; cout<<endl; CBall y(4.5); cout<<"球体半径为4.5"<<endl; p=&y; s=p->area( ); v=p->volume( ); cout<<"表面积:"<<s<<endl; cout<<"体积:"<<v<<endl; cout<<endl; CCylinder z(10,20); cout<<"圆柱体底面半径、高分别为10, 20"<<endl; p=&z; s=p->area( ); v=p->volume( ); cout<<"表面积:"<<s<<endl; cout<<"体积:"<<v<<endl; cout<<endl; system("pause"); return 0; } /*int main() { CCube c1(1); CBall c2(2); CCylinder c3(3,4); CSolid *p; p = &c1; cout << "正方体的表面积是:" << p->area() << "体积是:" << p->volume() <<endl; p = &c2; cout << "球体的表面积是:" << p->area() << "体积是:" << p->volume() << endl; p = &c3; cout << "圆柱体的表面积是:" << p->area() << "体积是:" << p->volume() << endl; system("pause"); return 0; }*/
感悟:这个任务其实就是任务三的改变而已,没有什么,就是主函数那的问题了,定义指针类的问题,搞定这一切万事大吉,找到书了,所以OK了,但还是用了老师的主函数,看着比我的好多了,我的就陪衬吧。