0

我正在为形状进行抽象基类的作业。对于最后一部分,我们需要编写一个类,它是任何先前 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()但我只是得到错误,告诉我“形状不代表一个值”等。

任何人都可以提供一些帮助吗?

4

3 回答 3

0

我可能读错了你的问题,但你似乎没有使用shape*. 所以你可以在你的班级中添加一个成员:

shape* s_;

prism(shape* s, double a) s_(s) ...

然后调用s_->getArea()

于 2014-03-20T18:25:41.183 回答
0

shape 是类类型而不是对象。您应该在构造函数中保留指向形状的指针。它应该是这样的:

你的班级成员:

shape * theShape;

你的构造函数:

prism(shape* sh, double a)
{
    z=a;
    theShape =sh;
}

你的 getVolume() 应该是这样的:

double getVolume(){ return theShape->getArea()*z;}
于 2014-03-20T18:26:47.147 回答
0

是的,抱歉,这是一个相当愚蠢的问题,但我猜这是一个容易犯的错误。正如你所说,我需要添加 ashape*作为我的 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();}

};
于 2014-03-21T11:14:57.747 回答