问题及代码:
/*
* Copyright (c)2015, 烟台大学计算机学院学生
* All rightsreserved.
* 文件名称: x.cpp
* 作者 : 李楠
* 完成日期: 2015年5月27日
* 版本号 : v1.0
* 问题描述: 设计一个抽象类CSolid,含有用于求表面积及体积的两个纯虚函数。设计派生类CCube、CBall、CCylinder,分别表示正方体、球体及圆柱体。
在main()函数中,定义CSolid *p;(p是指向基类的指针,且这个基类是个抽象类)。要求利用这个p指针,能够求出正方体、球体及圆柱体对象的表面积及体积。
* 输入描述: 略
* 程序输出: 略
*/
#include <iostream>
using namespace std;
class CSolid
{
public:
virtual void area() const=0;
virtual void volume() const=0;
};
class CCube:public CSolid
{
public:
CCube(double s):side(s) {}
virtual void area() const
{
cout<<"正方体的表面积:"<<6*side*side<<endl;
}
virtual void volume() const
{
cout<<"正方体的体积:"<<side*side*side<<endl;
}
private:
double side;
};
class CBall:public CSolid
{
public:
CBall(double r):rad(r){}
virtual void area() const
{
cout<<"球体的表面积:"<<4*3.14159*rad*rad<<endl;
}
virtual void volume() const
{
cout<<"球体的体积:"<<(4/3)*3.14159*rad*rad*rad<<endl;
}
private:
double rad;
};
class CCylinder:public CSolid
{
public:
CCylinder(double r,double h):rad(r),height(h) {}
virtual void area() const
{
cout<<"圆柱体的体积:"<<2*3.14159*rad*rad+2*3.14159*rad*height<<endl;
}
virtual void volume() const
{
cout<<"圆柱体的体积:"<<3.14159*rad*rad*height<<endl;
}
private:
double rad,height;
};
int main()
{
CSolid *p;
CCube c1(4);
CBall c2(2);
CCylinder c3(3,6);
p=&c1;
p->area();
p->volume();
p=&c2;
p->area();
p->volume();
p=&c3;
p->area();
p->volume();
return 0;
}
运行结果:
知识点总结:
抽象类很好用啊,但是要注意派生类里的函数要和抽象类的一样,const也要写上!!
学习心得:
这一周的项目是为了学习和巩固虚基类和抽象类~~