為了支援c++的多型性,才用了動態繫結和靜態繫結。
1、物件的靜態型別:物件在宣告時採用的型別。是在編譯期確定的。
2、物件的動態型別:目前所指物件的宣告。在執行期決定。物件的動態型別可以更改,但是靜態型別無法更改。
關於物件的靜態型別和動態型別,看乙個示例:
class a{};3、靜態繫結:繫結的是物件的靜態型別,某特性(比如函式)依賴於物件的靜態型別,發生在編譯期。class b: public a{};
class c: public a{};
int main()
4、動態繫結:繫結的是物件的動態型別,某特性(比如函式)依賴於物件的動態型別,發生在執行期。
class adosomething()是乙個非虛函式,它是靜態繫結的,也就是在編譯的時候根據物件的靜態型別來選擇函式,所以,pa、pb、pc呼叫的都是自己的的dosomething()函式,但對於①中的pa的fun()函式和②中的pa的fun()函式,因為fun()為虛函式,它們繫結的是動態物件,所以①的pa呼叫的是pc的fun()函式,②的pa呼叫的是pb的fun()函式。
需要注意的是:
當預設引數和虛函式一起出現的時候情況就有點複雜,因為虛函式是動態繫結的,但是為了執行效率,預設引數是靜態繫結的。
class a
b->fun()、a->fun()呼叫的都是b的fun()函式,但是預設函式是靜態繫結的,所以a->fun()呼叫的是a的虛函式fun()裡面的預設值10,b->fun()呼叫的是b的虛函式fun()裡面的預設值20。只有涉及虛函式的地方才存在動態繫結!!!!
C 動態繫結和靜態繫結
學習大佬的總結 為了支援c 的多型性,才用了動態繫結和靜態繫結。理解他們的區別有助於更好的理解多型性,以及在程式設計的過程中避免犯錯誤。需要理解四個名詞 1 物件的靜態型別 物件在宣告時採用的型別。是在編譯期確定的。2 物件的動態型別 目前所指物件的型別。是在執行期決定的。物件的動態型別可以更改,但...
動態繫結和靜態繫結
繫結 binding 是指將變數和函式名轉換成位址的過程 絕大部分的順序執行邏輯中函式呼叫或某個確定資料型別的class型別的物件對成員呼叫都屬於靜態繫結 include using namespace std class employee class teamper public employee...
C 的動態繫結和靜態繫結
定義 1 物件的靜態型別 物件在宣告時採用的型別。是在編譯期確定的。2 物件的動態型別 目前所指物件的型別。是在執行期決定的。物件的動態型別可以更改,但是靜態型別無法更改。eg.class b class c public b class d public b d pd new d pd的靜態型別是...