您的位置:首页 > 其它

private继承导致子类不能转化为父类

2010-05-10 23:14 246 查看
写代码时,不小心将一个子类的以private的方式继承了一个抽象父类。使用的时候,实例化了这个子类的一个对象,但是无法通过dynamic_cast安全的转化为父类的对象来使用,如下:

class ITcpImpl
{
public:
virtual ~ITcpImpl()
{
}
};

class IWorker
{
};

class TcpWorker: public IWorker, ITcpImpl
{

};

int main(int argc, char* argv[])
{
TcpWorker* pTcpWorker = new TcpWorker();
ITcpImpl* pITcpImpl = dynamic_cast<ITcpImpl*>(pTcpWorker);

assert(NULL != pITcpImpl);		//这里断言失败

return 0;
}


这里TcpWorker以private的方式继承ITcpImpl实际上是个手误,本意是class TcpWorker: public IWorker, public ITcpImpl 的。

当将private继承方式改成public时,断言就成功了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: