假设有两个这样的类
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);
我是否应该证明不这样做,将其余部分留给用户使用,我的意思是,如果他做错了 Actor 表,那是他的问题吗?
最佳答案
使用合成代替继承:
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*
,那么他们正在调用未定义的行为,那是他们的问题,而不是您的问题。