private继承导致子类不能转化为父类
2010-05-10 23:14
246 查看
写代码时,不小心将一个子类的以private的方式继承了一个抽象父类。使用的时候,实例化了这个子类的一个对象,但是无法通过dynamic_cast安全的转化为父类的对象来使用,如下:
这里TcpWorker以private的方式继承ITcpImpl实际上是个手误,本意是class TcpWorker: public IWorker, public ITcpImpl 的。
当将private继承方式改成public时,断言就成功了。
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时,断言就成功了。
相关文章推荐
- 子类不能继承或覆盖父类的private方法
- 子类不能对父类private方法重写
- 必须得说一下,子类关于从父类继承过来的private成员这点事儿
- java中如何让一个子类不能调用从父类继承的方法
- 子类继承父类,但是每个子类又不能全部拥有基类的属性
- 子类会继承父类的私有方法和私有属性,只是不能直接访问
- Java中子类能够继承父类的private属性或方法吗?
- JAVA为什么子类继承父类方法之后,不能抛出比父类更多的异常?
- Java-关于子类是否继承了父类的private实例变量
- java类继承总结一 父类类型与子类类型之间的转化问题
- JAVA为什么子类继承父类方法之后,不能抛出比父类更多的异常?
- 子类继承父类private属性问题
- 子类继承父类重写静态方法不能变成普通方法
- C++ 中有没有不能被子类继承的父类成员?
- 关于原型链和继承问题的思考:为什么不能直接把父类的prototype赋值给子类的prototype
- 父类中的private方法会被子类继承吗????可以访问吗????
- 牛客网Java刷题知识点之子类继承不了父类里的(private属性、private方法、构造方法)
- 关于子类为何不能继承父类构造方法的几点解释
- PHP规则子类能否继承父类的private方法?
- java类继承总结一 父类类型与子类类型之间的转化问题