程序头部注释开始
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称: 纯虚函数
* 作 者: 王智凯
* 完成日期: 2012年 5月14日
* 版 本 号: 凯子
//【任务4】设计一个抽象类CSolid,含有两个求表面积及体积的纯虚函数。
//设计个派生类CCube、CBall、CCylinder,分别表示正方体、球体及圆柱体。
//在main()函数中,定义基类的指针p(CSolid *p;),利用p指针,输出正方体、球体及圆柱体对象的表面积及体积。
#include <iostream>
using namespace std;
double pi = 3.14;//define pi = 3.14;
//CSolid
class CSolid
{
public:
virtual float area() = 0;
virtual void show() =0;
virtual float volume() = 0;
};
//CCube
class CCube:public CSolid
{
public:
CCube(float a1):a(a1){}
float area() ;
float volume() ;
void show();
protected:
float a;
};
float CCube::area()
{
return a*a*6;
}
float CCube::volume()
{
return a*a*a;
}
void CCube::show()
{
cout<<"正方体的边长是:"<<a<<endl;
}
//CBall
class CBall:public CSolid
{
public:
CBall(float r1):r(r1){}
float area() ;
float volume() ;
void show();
protected:
float r;
};
float CBall::area()
{
return pi*4*r*r;
}
float CBall::volume()
{
return (4/3)*pi*r*r*r;
}
void CBall::show()
{
cout<<"圆的半径是:"<<r<<endl;
}
//CCylinder
class CCylinder:public CSolid
{
public:
CCylinder(float r2,float h1):ra(r2),h(h1){}
float area() ;
float volume() ;
void show();
protected:
float ra;
float h;
};
float CCylinder::area()
{
return pi*ra*ra+2*pi*ra*h;
}
float CCylinder::volume()
{
return pi*ra*ra*h;
}
void CCylinder::show()
{
cout<<"圆柱体的高是:"<<h<<endl;
cout<<"圆柱体的底面半径是:"<<ra<<endl;
}
//main函数
void main()
{
CSolid *p;
CCube c1(3.5);
CBall c2(4.5);
CCylinder c3(3,5);
p = &c1;
p->show();
cout << "正方体的体积:" << p->volume() << endl;
cout << "正方体的表面积:" << p->area() << endl << endl;
p = &c2;
p->show();
cout << "球的体积:" << p->area() << endl << endl;
p = &c3;
p->show();
cout << "圆柱的体积:" << p->area() << endl;
cout << "圆柱的体积:" << p->volume() << endl;
system("pause");
}
上机感言:通过前边3个函数的对比,对纯虚函数有了更深的了解。
定义纯虚函数时main函数挺难写的。。。。。。