C 中多型要注意的事情 與Java的對比

2021-06-04 10:22:50 字數 786 閱讀 4658

注:下面是我自己最近看書的總結,應該有錯誤

在c++中,如果子類與父類的函式名相同,那麼子類將覆蓋父類中同名的函式,也就是說,在繼承關係中,方法簽名只由方法名決定。若想實現多型效果,那麼只能使用虛函式來實現。父類中的虛函式可能被編譯為乙個指標,編譯子類時將子類相應的函式位址賦值給那個指標。

我想,繼承在向上和向下兩個方向起作用:

向上:子類可以使用父類中public和protected的方法和變數,實現**重用。

向下:父類中的虛函式由不同的子類實現,實現多型。

在這個模型中,容易出問題的地方應該在「覆蓋」上。子類物件賦值給父類變數後,執行的是父類中的函式,而不是自身的函式。這樣一是容易使人陷入困惑,二是增大了物件的體積。所以我認為在設計時要盡量避免這種情況。如果是特意追求這種效果,一定要在注釋中對此進行說明。

例如下面的**:

#include using namespace std;

class base

public void g(double x)

}class derived extends base

public void g(double x, double y)

}class basederived

}

執行結果:

base.f(double):3.14

base.f(double):3.14

說明儘管子類中定義了同名的f(int)和g(double, double),但父類中的f(double)和g(double)仍能使用。

C 中多型要注意的事情 與Java的對比

注 下面是我自己最近看書的總結,應該有錯誤 在c 中,如果子類與父類的函式名相同,那麼子類將覆蓋父類中同名的函式,也就是說,在繼承關係中,方法簽名只由方法名決定。若想實現多型效果,那麼只能使用虛函式來實現。父類中的虛函式可能被編譯為乙個指標,編譯子類時將子類相應的函式位址賦值給那個指標。我想,繼承在...

iOS中需要注意的事情

開個帖子來記錄下遇到的一些ios開發中需要注意的東西。2.uiview的frame問題 有時候用到一些view的尺寸 比如求view的高度 提示功能可能會可以直接給出view.height,模擬器上是好用的,但是真機不行。所以要寫全view.frame.size.height或者view.bound...

敏捷開發中需要注意的事情

1.團隊中各個隊員的直接面對面相互溝通勝過任何的工具溝通 2.可以工作的軟體勝過詳細的文件,才是最好的文件 3.良好的客戶關係比死板的合同更具有意義 4.及時的響應變化勝過時刻遵循計畫 5.盡早的持續的交付有價值的軟體使客戶滿意 6.任何時候都積極的擁抱需求的變化,哪怕是開發後期也是如此 7.在整個...