对于具有接受基类指针的构造函数的派生类,如何引用基类指针?



我正在做一个关于形状的抽象基类的作业。对于最后一节,我们需要编写一个类,它是任何先前的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();}
};

相关内容

  • 没有找到相关文章

最新更新