请问下C++程序中哪里错了 (体现多态性)求高手指点

2024-12-22 20:24:27
推荐回答(2个)
回答1:

语法上的错误:
1.子类构造方法调用父类构造方法的形式:
cube(double x):container(double radius1)应该写成cube(double x):container(x)
其他子类类似的问题
2.成员方法没有写返回值,
virtual double surface_area()
{
cout<<"正方体的边长:"< cout<<"正方体的表面积:"<<"6*b*b="<<6*b*b;
}
应该加上一句return 6*b*b;
其他的方法存在类似的问题。
3.cube类的构造方法中a = x;中的a变量没有定义
4.父类container的构造函数没有实现。应该写成如下形式:
public:
container(double radius1) {};

OK 改完这四类问题后编译即可通过。

该代码同时存在语义问题:
类container中的属性radius 你打算什么时候使用?
类container中的属性radius为半径,cube是没有半径的如何对应?
从这个意义上将你这个类的继承关系设计的有问题。

回答2:

class container
{
public:
virtual void surface_area()=0;
virtual void volume()=0;
};

class cube:public container
{
protected:
double b;
public:
cube(double x):container()
{
b = x;
}
virtual void surface_area()
{
cout<<"正方体的边长:"< cout<<"正方体的表面积:"<<"6*b*b="<<6*b*b< }
virtual void volume()
{
cout<<"正方体的边长:"< cout<<"正方体的体积:"<<"b*b*b="< }

};
class sphere:public container
{
protected:
double a;
public:
sphere(double a)
{}

virtual void surface_area()
{
cout<<"球的半径:"< cout<<"球的表面积:"<<"4*3.1415*a*a="<<4*3.1415*a*a< }
virtual void volume()
{
cout<<"球的半径:"< cout<<"球的体积:"<<"4/3*3.1415*a*a*a="<<4/3*3.1415*a*a*a< }

};
class cylinder:public container
{
protected:
double a;
double b;
public:
cylinder(double x , double y ):container()
{ a = x;
b = y;
}
virtual void surface_area()
{
cout<<"圆柱体的高:"< cout<<"圆柱体的半径:"< cout<<"圆柱体的表面积:"<<"3.1415*b*b+2*3.1415*a*b="<<3.1415*b*b+2*3.1415*a*b< }
virtual void volume()
{
cout<<"圆柱体的高:"< cout<<"圆柱体的半径:"< cout<<"圆柱体的体积:"<<"3.1415*b*b*a="<<3.1415*b*b*a< }
};