gpt4 book ai didi

C++派生类用另一个派生类覆盖基类的成员?

转载 作者:太空宇宙 更新时间:2023-11-04 14:02:57 24 4
gpt4 key购买 nike

我有这样的类(class):

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 函数),那么你就卡住了。没有推导你可以做得到 CheckBuildingDerivedParkingLot 进行操作的函数对象。

这个故事的寓意是类必须从一开始就设计为继承。

关于C++派生类用另一个派生类覆盖基类的成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18391188/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com