#include
using namespace std;
class Point
{
protected:
int x,y;
};
class Circle:public Point
{protected:
double r;
public:
double area();
};
double Circle::area()
{double area;
cout<<"请输入圆的半径r:";
cin>>r;
area=3.14*r*r;
return area;
}
class Cylinder:public Circle
{private:
double h;
public:
double area();
double volume();
};
double Cylinder::area()//求圆柱体的表面积
{
double barea;
cout<<"请输入圆柱的高:";
cin>>h;
barea=3.14*2*r*h+3.14*r*r*2;
return barea;
}
double Cylinder::volume()//求圆柱体的体积
{
double volume;
volume=3.14*r*r*h;
return volume;
}
int main()
{
Circle cir;
cout<<"圆的面积为:"<<cir.area()<<endl;
Cylinder cy;
cout<<"圆柱体的表面积为:"<<cy.area()<<endl;
cout<<"圆柱体的体积为:"<<cy.volume()<<endl;
return 0;
}
Circle cir;
Cylinder cy;//这是两个对象 其在两个不同内存区域,cy 对象r值没有初始化。
你的问题结果错误的原因不是函数值传递的问题,是因为做为Cylinder的父类Circle没有构造函数,当声明Cylinder cy;时,
其父类中的变量r并没有赋值,所以计算结果肯定错误的。前面定义了Circle cir;是Circle类的一个实例,其变量并不会传递到
Cylinder 类的实例中。解决方法是给Circle类定义一个构造函数,将area()函数中的cout<<"请输入圆的半径r:";cin>>r;做为构造函数
内容,同时也要修改area()函数,如有问题再交流。
Circle类的r变量成员没有初始值~
揣测了下,题主想问啥,应该是问 为什么 求圆柱体的表面积和体积不正确
错误的地方在于,想象中 已经输入了圆的半径,圆柱体类继承了圆的类,所以半径应该也继承过去了,只需要输入高,则可以求。
这种想法显然是非常不正确di。
继承的意思,并不是说,继承自哪个类,那个类的成员值都会跟着过来。
Circle cir 是一个实例,对于任何一个实例,都是单独开出一个空间来存放的,它们的形式是一样的,但是内容不一样,
就好像 按照一个模子建造的房子,来一个人,给他一个房间住,再来一个人给他另一个房间住,虽然房间的样式一样,但里面人不一定一样。
Circle类的r变量成员没有初始值~