子类无法访问父类的变量
Subclass unable to access parent class' variable
我正在制作一个程序,我有一个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],这样您就可以得到实际错误处理而不是崩溃。
相关文章:
- 从类继承时,继承的类是否会通过父类重新定义继承的变量
- 如何在C++子类中访问父类的私有变量
- 从模板化父类中的派生内部类访问受保护的成员变量
- 如何将一个变量用于父类和派生类
- 是否可以在不修改父类的情况下将成员变量初始化推迟到继承的类?
- 重写子类构造函数中的父类变量
- 编辑从父类继承的变量
- 父类中的构造函数不会将值分配给私有变量
- 如何在 getter 的父类中初始化变量的情况下访问子类中的变量
- 尝试为所有子类 B 编辑父类 A 类的静态变量
- 删除父类时,方法局部静态变量会发生什么情况
- 有没有更好的方法可以从子类访问父类的变量?
- C++:使用父类运算符函数更新子类对象的继承变量
- 引用子变量的父类
- 访问父类变量
- 子类无法访问父类的变量
- 在C++中,如何从父类变量的子类调用重载方法
- 带模板的继承(访问子类成员函数内父类的变量和对象)
- 如何从父类访问变量
- 如何从派生类修改父类的变量?