程序源码:
#include "stdafx.h"
#include <iostream.h>
#include <math.h>
#define pi 3.14
inline double sqr(double x)
{
return x*x;
}
class cCircle
{
public:
cCircle(double radiusVal=0):radius(radiusVal){};
void setRadius(double radiusVal)
{
radius = radiusVal;
}
double getRadius() const
{
return radius;
}
double area() const
{
return pi*sqr(radius);
}
void showData();
protected:
double radius;
private:
};
class cCylinder: public cCircle
{
public:
cCylinder(double heightVal=0, double radiusVal=0): height(heightVal), cCircle(radiusVal)
{
}
void setHeight(double heightVal)
{
height = heightVal;
}
double getHeight() const
{
return height;
}
double area() const
{
return 2*cCircle::area()+2*pi*radius*height;
}
void showData();
protected:
double height;
private:
};
void cCircle::showData()
{
cout<<"Circle radius = " << getRadius() << "/n"
<<"Circle area = " << area() << "/n/n";
}
void cCylinder::showData()
{
cout << "Cylinder radius =" << getRadius() << "/n"
<< "Cylinder height = " << getHeight() << "/n"
<< "Cylinder area = " << area() << "/n/n";
}
int main(int argc, char* argv[])
{
cCircle Circle(1);
cCylinder Cylinder(10,1);
Circle.showData();
Cylinder.showData();
return 0;
}
输出结果:
Circle radius = 1;
Circle area = 3.14;
Cylinder radius = 1;
Cylinder height = 10;
Cylinder area = 69.08
=====================================
特别注意以下两处:
1) cCircle(double radiusVal=0):radius(radiusVal){};
radius 是类的成员变量,当用此构造函数初始化类时, radius同时被赋值初始化;
2)
class cCylinder: public cCircle
{
public:
cCylinder(double heightVal=0, double radiusVal=0): height(heightVal), cCircle(radiusVal)
{
}
。。。
}
cCylinder 继承自cCircle; 当cCylinder用此构造函数初始化时,成员变量height同时被初始化赋值为heightVal; 继承自父类cCircle的成员变量radius被初始化为radiusVal(成员radius时用cCricle类中的构造杉树调用实参radiusVal进行初始化的。)
cCylinder类的函数getHeight和setHeight分别用于设置和查询成员height.此类使用继承的setRadius和getRadius处理成员radius。函数area取消了继承的函数cCircle::area(), 返回圆柱体的表面积。注意:此函数明确的用到继承函数cCircle::area().