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

时间:2014-03-20 18:18:43

标签: c++ pointers derived-class abstract-base-class

我正在为形状的抽象基类工作。对于最后一节,我们需要编写一个类,它是任何先前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(),但我只是得到错误告诉我“形状没有引用价值”等。

有人可以提供一些帮助吗?

3 个答案:

答案 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();}

};