gpt4 book ai didi

c++ - 我怎样才能防止这种在 C++ 中的转换

转载 作者:太空狗 更新时间:2023-10-29 23:42:10 24 4
gpt4 key购买 nike

假设有两个这样的类

class Locator
{
public:
// this goes to the specified latitide and longitude
bool GoToLocation(long lat, long longtd);
};

class HouseLocator : private Locator
{
public:
// this internally uses GoToLocation() after fetching the location from address map
bool GoToAddress(char *p);
}

我进行私有(private)继承以阻止 HouseLocator 上的 GoToLocation(),因为它在那里没有意义并迫使人们使用正确的接口(interface)。

现在我的问题是,我怎样才能防止这种转换?

HouseLocator *phl = new HouseLocator;
Locator *pl = (Locator*)phl;
pl->GoToLocation(10, 10);

我是否应该记录不要这样做并将其余的留给用户,我的意思是,如果他投错了,那是他的问题?

最佳答案

使用组合而不是继承:

class Locator
{
public:
bool GoToLocation(long lat, long longtd);
};

class HouseLocator
{
Locator locator_;
public:
// internally uses locator_.GoToLocation()
bool GoToAddress(char *p);
};

如果由于某种原因这不切实际,那么使用 private 继承是您最好的选择——如果用户将 HouseLocator* 转换为 Locator* 他们正在调用未定义的行为,这是他们的问题,不是你的问题。

关于c++ - 我怎样才能防止这种在 C++ 中的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5674284/

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