java 重写析构函数_C++虚析构和java的override

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

[code=C/C++][/code]

classA

{

public:

A(){}

~A(){}

};

classB:publicA

{

public:

B(){}

~B(){}

};

intmain()

{

A *p=newB;

deletep;

p=0;

return0;

}

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

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

==========

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

classA {

publicvoidmethod1(){

}

publicvoidmethod2(){

}

}

classBextendsA{

publicvoidmethod1(){

}

@override

publicvoidmethod2(){

}

}

A a =newB();

a.method1();

a.method2();

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

=====

C++                      Java

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

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

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

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

=========

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值