C++虚析构とjavaのoverride


CSDNでC++お釣りの問題を見たばかりですが、次の通りです。
 
   
   
   
   
  1. [code=C/C++][/code] 
  2. class A 
  3. public
  4. A(){}    
  5. ~A(){} 
  6. }; 
  7.  
  8. class B:public A 
  9. public
  10. B(){}    
  11. ~B(){} 
  12. }; 
  13.  
  14. int main() 
  15. A *p=new B; 
  16. delete p; 
  17. p=0; 
  18. return 0; 
問題はどこにありますか? 問題はdelete pを実行するとき、A{}という関数を実行しただけで、実行していません。
解決方法は~A{}を虚構関数に変えて、virtual~A{}は何ですか?
=============
私は以前javaの勉強をしていましたが、javaの中でこのような状況なら、以前に会ったことがあります。もちろん私が実行しているのはコンストラクションではありません。
 
   
   
   
   
  1. class A { 
  2.  public void method1(){ 
  3.  public void method2(){ 
  4.  
  5.  
  6. class B  extends A{ 
  7.  public void method1(){ 
  8. @override 
  9.  public void method2(){ 
  10.  
 
   
   
   
   
  1. A a = new B(); 
  2. a.method1(); 
  3. a.method2(); 
この時a.method 1()が実行するのはAの中のmethod 1の方法ですが、a.method 2()が実行するのは確かにBの中のmethod 2()の方法です。なぜですか? method 2メソッドの署名に注釈が付けられていますので。 これで書き換える効果があります。実はeclipseは自動的にあなたに加えられます。
=====
C++                     Java
虚数関数    --------   一般関数
純虚数関数  --------   抽象関数
抽象類    --------   抽象類
虚基類    --------   インターフェース
 
===========
前のC++の問題に戻るのは、同じことです。 分かりましたか?みなさん