我有这样的课程:
class ParkingLot
{
public:
int spaces;
virtual bool something() { return true; }
}
class ParkingLotBuilding
{
public:
ParkingLot Floor1, Floor2;
}
我有很多使用ParkingLotBuilding的功能。假设某人(我)来自ParkingLot和ParkingLotBuilding:
class DerivedParkingLot : public ParkingLot
{
public:
virtual bool something() { return false; }
}
class DerivedParkingLotBuilding : public ParkingLotBuilding
{
public:
// how can I make it so that Floor1 and Floor2 are for DerivedParkingLot?
}
我有一些我无法控制的功能,例如:
CheckBuilding( ParkingLotBuilding &building )
{
if(building.Floor1.something() == true)
// error
}
如果我将DerivedParkingLotBuilding对象传递给该函数,该如何使它调用DerivedParkingLot :: something()返回false?那可能吗?抱歉,如果我没有解释这个权利,我不确定如何问这个问题。谢谢
最佳答案
正如JohnSmith指出的那样,您不能覆盖数据成员,而只能覆盖成员函数。由于ParkingLotBuilding
包含ParkingLot
值,而不包含ParkingLot
指针或引用,因此即使在DerivedParkingLot
中也不能多态使用它们。 (这就是C ++的工作方式:只有指针和引用才能具有动态类型。)
这意味着,如果您不能更改ParkingLotBuilding
类(或CheckBuilding
函数),则将陷入困境。没有派生可以执行的操作,可以使CheckBuilding
函数在DerivedParkingLot
对象上进行操作。
这个故事的寓意是,必须从一开始就为继承设计类。
关于c++ - C++派生类重写基类的成员与另一个派生类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18391188/