1. 程式人生 > >c++子類繼承父類函式呼叫特性原理以及與java的對比

c++子類繼承父類函式呼叫特性原理以及與java的對比

c++

  • c++中子類繼承了父類,子類物件的函式和變數會接著新增在父類物件的記憶體後面,以此類推。。。
  • 如果c++中父類的那個變數或者函式宣告為virtual虛擬函式,那麼子類物件的同名函式就直接覆蓋了(即在記憶體中真正的覆蓋,父類的這個函式已經不在了)父類物件的這個函式
  • 如果沒有宣告父類函式為virtual,那麼子類物件中的同名函式的名字會隱藏掉父類的同名函式(即父類此名字函式(無論父類中過載了幾個這個名字的函式)完全不可見了,但是函式還是在的),但是這時候又一定要呼叫父類的這個同名函式的話,怎麼辦呢(雖然父類此函式名字被覆蓋了,但是父類的這個函式還是存在的呀,當然就可以呼叫啦),我們就需要顯式指定呼叫:                        (通過class::funtion_name
    )。  

java

  • java語言中父類和子類的同名函式做的是過載處理

子類中呼叫本函式的名字的函式,預設的是呼叫父類中本函式名的函式,即:

class Base

         func();

class Sub

        func()

        {

                func();     // 其實預設為 this.func();即呼叫的是父類的func()函式,而不是遞迴的呼叫自己,這樣不就是死迴圈了嘛

        }