我正在为形状的抽象基类工作。对于最后一节,我们需要编写一个类,它是任何先前2D形状的一般3D版本,例如。方。
从下面的代码中可以看出,它的构造函数采用了基类指针shape*
。在我的函数“getVolume
”中,我基本上需要将z
乘以shape*
指向的形状区域,该区域可以通过指定的函数getArea()
计算得出在每个形状各自的类。但是,我指的是指向的形状吗?
class prism : public square, public rectangle, public circle {
private:
double z;
public:
prism(){z=0;}
prism(shape*, double a){z=a;}
~prism(){cout<<"Prism destructor called"<<endl;}
//Access functions
void print_(){cout<<"Prism with length = "<<z;}
double getLength(int n)const{ return z; }
void setLength(double a){z=a;}
//Other functions
double getVolume(){ return ??????????;}
};
如何引用指向的形状?我希望它会像this->getArea()
或shape*->getArea()
,但我只是得到错误告诉我“形状没有引用价值”等。
有人可以提供一些帮助吗?
答案 0 :(得分:0)
我可能会错误地阅读您的问题,但您似乎并未使用shape*
。所以你可以在你的班级中添加一个成员:
shape* s_;
prism(shape* s, double a) s_(s) ...
然后拨打s_->getArea()
。
答案 1 :(得分:0)
shape是类类型而不是对象。您应该将指针保持在构造函数中的形状。应该是这样的:
您的班级成员:
shape * theShape;
你的构造函数:
prism(shape* sh, double a)
{
z=a;
theShape =sh;
}
你的getVolume()应该是:
double getVolume(){ return theShape->getArea()*z;}
答案 2 :(得分:0)
对不起,这是一个相当愚蠢的问题,但我猜是一个容易犯的错误。正如你所说,我需要添加一个shape*
作为我的prism类的成员,然后我可以在我的构造函数中引用它。对于遇到类似困惑的人来说,我相信这类课程应该是这样的!
class prism : public ...(reference 'shapes')..... {
private:
double z;
shape* s;
public:
prism(shape* s_, double a){z=a; s=s_;}
double doSomethingToShape(){return s->doSomething();}
};