子类无法访问父类的变量

Subclass unable to access parent class' variable

本文关键字:变量 父类 访问 子类      更新时间:2023-10-16

我正在制作一个程序,我有一个Square类,该类是Shape类的子类

但是当子类试图从父类访问变量时,我的程序崩溃了。

这是我的代码:

class Shape2D
{
public:
    string shape;
    void setShape(string newShape);
    string getShape();
    string specialType;
    void setSpecialType(string newSpecialType);
    vector <int> shapeXCoordi;
    void setshapeXCoordi(int newshapeXCoordi);
    vector <int> shapeYCoordi;
    void setshapeYCoordi(int newshapeYCoordi);
    void toString();
    virtual int computeArea()
    {
        return 0;
    }
    void displayArea();
};

出于测试目的,我只使此 computeArea()返回x坐标。

class Square : public Shape2D
{
public:
    int computeArea()
    {
        return shapeXCoordi[0];
    }
};
int main()
{
    if (aShape2D[0].getShape() == "Square")
    {
        Shape2D *pShape2D;
        pShape2D = &aSquare;
        cout << "Area: " << pShape2D -> computeArea()  << endl;
    } 
}

我做了几个测试,如果我要将return shapeXCoordi[0];更改为return 123;,则可以正常工作。

我也尝试了return shape;,但它不会显示任何内容,尽管这次不会崩溃。

所以我猜当SquareClass尝试从ShapeClass

访问shapeXCoordi[0]时,有问题

任何人都可以在这种情况下启发我吗?

首先调用setShapexcoordi,您需要初始化构造函数中的shapexcoordi。由于您正在访问一个非初始化的向量ShapeXcoordi,因此中没有元素。因此,当您使用[0]访问它时,它会返回错误。

您可以在computearea()中添加理智检查,以确保访问ShapeXcoordi中有一个元素:

int computeArea()
{
    assert(shapeXCoordi.size() != 0);
    return shapeXCoordi[0];
}

另外,我建议使用.at(0)而不是[0],这样您就可以得到实际错误处理而不是崩溃。