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

文章详细介绍了在C++中错误地将子类以私有方式继承抽象父类导致的类型转换失败问题,并提供了修复方法。

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

 

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

当将private继承方式改成public时,断言就成功了。

第2次网课测试题--继承和多态单元测试 题量: 20 满分: 100 作答时间:04-17 18:48至04-20 23:48 一. 单选题(共20题,100分) 1. (单选题) 在下面哪种情况下,可以使用方法重写? A 父类中的方法在子类中没有时 B 父类方法中的返回值类型不适合子类使用 C 父类的功能无法满足子类的需求时 D 父类方法中的形参不适用于子类使用时 2. (单选题) B是父类,C是子类父类引用指向子类对象B b = new C()时,下列说法那个是错误的 A 若子类定义了父类同名的属性,父类引用调用子类的属性 B 若子类未覆盖某属性,则父类引用调用父类本身的旧属性 C 若子类定义了父类同名的某方法,则父类引用调用子类重新定义的新方法 D 若子类未覆盖某方法,则父类引用调用父类本身的旧方法 3. (单选题) 如果父类的方法是静态的,则子类的方法被()修饰才能覆盖父类的静态方法? A static B private C final D protected 4. (单选题) 运行下面程序的结果是什么? abstract class MineBase { abstract void amethod(); static int i; } public class Mine extends MineBase { public static void main(String[] a) { int[] ar = new int[5]; for (int i=0; i<ar.length; i++) { System.out.println(ar[i]); } } } A 编译错误,Mine应声明为抽象类 B 出现IndexOutOfBoundsException异常 C 打印5个0 D 编译错误,数组ar[]必须初始化 5. (单选题) 下面对于final修饰方法的描述中,正确的是? A final修饰的抽象方法可以被子类重写 B final修饰的静态方法不能被类名调用 C final修饰的方法不能子类重写 D final只能修饰非静态的方法 6. (单选题) 编译运行如下Java代码,输出结果是( )。 class Base { public void m
最新发布
04-21
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值