C++虚析构和java的override

刚刚在优快云上看到了一道C++找错题题目如下:

 

  1. [code=C/C++][/code]
  2. classA
  3. {
  4. public:
  5. A(){}
  6. ~A(){}
  7. };
  8. classB:publicA
  9. {
  10. public:
  11. B(){}
  12. ~B(){}
  13. };
  14. intmain()
  15. {
  16. A*p=newB;
  17. deletep;
  18. p=0;
  19. return0;
  20. }

问题出现在哪里? 问题是当执行delete p的时候,执行了仅仅是执行了~A{}这个函数,而没有执行~B(){}这个函数。

解决方法是将~A{}变为虚析构函数,virtual ~A{} 為什麼呢?

==========

我之前是学习java的 在java中如果是这种情况我之前遇到过 ,当然我执行的不是析构函数,如下:

 

  1. classA{
  2. publicvoidmethod1(){
  3. }
  4. publicvoidmethod2(){
  5. }
  6. }
  7. classBextendsA{
  8. publicvoidmethod1(){
  9. }
  10. @override
  11. publicvoidmethod2(){
  12. }
  13. }

 

  1. Aa=newB();
  2. a.method1();
  3. a.method2();

这个时候a.method1()执行的其实是A中的method1方法,然而a.method2()执行的确实B中的method2()方法,为什么呢? 因为method2方法签名上面加上了注解(Annotation) @override 这样就达到重写的效果。 其实eclipse 完全可以自动给你加上。

=====

 

C++ Java

虚函数 -------- 普通函数

纯虚函数 -------- 抽象函数

抽象类 -------- 抽象类

虚基类 -------- 接口


=========

回到上个C++的问题 ,其实是一个道理。 明白了了吗?各位

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值