- #include<iostream>
- using namespace std;
- //基类
- class CSolid
- {
- public :
- virtual double area() const=0;//面积
- virtual double tiji() const=0;//体积
- };
- ///正方体
- class CCube:public CSolid
- {
- private:
- double chang,kuan,gao;
- public :
- CCube(double cha,double kua,double ga):chang(cha),kuan(kua),gao(ga){}
- double area() const;
- double tiji() const;
- };
- /******/
- double CCube::area() const
- {
- return chang*kuan*2+chang*gao*2+kuan*gao*2;
- }
- double CCube::tiji() const
- {
- return chang*kuan*gao;
- }
- ///球体
- class CBall:public CSolid
- {
- private:
- double banjing;
- public:
- CBall(double ban):banjing(ban){}
- double area() const;
- double tiji() const;
- };
- /*******/
- double CBall::area() const
- {
- return 4*3.14159*banjing*banjing;
- }
- double CBall::tiji() const
- {
- return 4*3.14159*banjing*banjing/3;
- }
- ///圆柱体
- class CCylinder:public CSolid
- {
- private:
- double banjing,gao;
- public:
- CCylinder(double ban,double ga):banjing(ban),gao(ga){}
- double area() const ;
- double tiji() const ;
- };
- double CCylinder::area() const
- {
- return 3.14159*banjing*banjing*2+2*3.14159*banjing*gao;
- }
- double CCylinder::tiji() const
- {
- return 3.14159*banjing*banjing*gao;
- }
- int main()
- {
- CCube c1(2.1,2.1,2.1);
- CBall b1(2.5);
- CCylinder r1(2.5,3.0);
- CSolid *pt[3]= {&c1,&b1,&r1}; //定义基类指针数组pt,使它每一个元素指向一个派生类对象
- cout<<"长方体表面积:"<<pt[0]->area()<<" 长方体体积:"<<pt[0]->tiji()<<endl;
- cout<<"球体的表面积:"<<pt[1]->area()<<" 球体的体积:"<<pt[1]->tiji()<<endl;
- cout<<"圆柱的表面积:"<<pt[2]->area()<<" 圆柱的体积:"<<pt[2]->tiji()<<endl;
- return 0;
- }