我正在做一个关于形状的抽象基类的作业。对于最后一节,我们需要编写一个类,它是任何先前的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()
一样,但我只是得到错误,告诉我"形状不指向值"等。
有人能提供一些帮助吗?
shape是一个类类型而不是对象。应该在构造函数中保留指向shape的指针。它应该是这样的:
你的类成员:
shape * theShape;
和构造函数:
prism(shape* sh, double a)
{
z=a;
theShape =sh;
}
你的getVolume()应该像
double getVolume(){ return theShape->getArea()*z;}
我可能读错了你的问题,但你似乎没有使用shape*
。你可以在你的类中添加一个成员:
shape* s_;
prism(shape* s, double a) s_(s) ...
然后调用s_->getArea()
是的,对不起,这是一个相当愚蠢的问题,但我猜这是一个容易犯的错误。正如你所说,我需要添加一个shape*
作为我的棱镜类的成员,我可以在我的构造函数中引用。对于任何遇到类似困惑的人,我认为这类类应该是什么样子的!
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();}
};