C++中的两种绑定方式(静态绑定、动态绑定)
生活随笔
收集整理的這篇文章主要介紹了
C++中的两种绑定方式(静态绑定、动态绑定)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
兩種綁定方式
靜態綁定:在編譯時刻,根據指針或引用變量的靜態類型來決定成員函數屬于哪一個類。
動態綁定:在運行時刻,根據指針或引用變量實際指向或引用的對象類型(動態類型)來確定成員函數屬于哪一個類。
需要注意:
- C++默認的綁定方式是靜態綁定。示例如下:
#include<iostream>
using namespace std;class bird{public:void fly(){cout<<"bird fly"<<endl;};//鳥會飛void walk(){cout<<"bird walk"<<endl;}//鳥會走
};class penguin: public bird{public:void swim();//企鵝會游泳void fly(){cout<<"penguin can not fly"<<endl;}void walk(){cout<<"penguin walk"<<endl;}
};void func1(bird&bd){bd.fly();
}
void func2(bird*pb){pb->fly();
}int main(){bird bd;penguin pg;bd.fly();//bird::fly()func1(bd);//bird::fly()func2(&bd);//bird::fly()pg.fly();//penguin::fly()func1(pg);//bird::fly()func2(&pg);//bird::fly()return 0;
}
- 必須在程序中顯式地指出動態綁定。
動態綁定的實現
動態綁定的實現條件:
- 類的定義中成員函數聲明為虛函數
- 通過引用或指針來訪問對象的虛函數
virtual聲明需要注意:
- 一旦在基類中指定某成員函數為虛函數,那么,不管在派生類中是否給出virtual聲明,派生類(以及派生類的派生類,…)中對其重定義的成員函數均為虛函數
- 重定義: 對派生類中定義的成員函數, 其函數名, 參數個數和類型以及返回值類型與基類的某個虛成員函數相同(override)
動態綁定示例:
#include<iostream>
using namespace std;class bird{public:virtual void fly(){cout<<"bird fly"<<endl;};//鳥會飛void walk(){cout<<"bird walk"<<endl;}//鳥會走
};class penguin: public bird{public:void swim();//企鵝會游泳void fly(){cout<<"penguin can not fly"<<endl;}void walk(){cout<<"penguin walk"<<endl;}
};void func1(bird&bd){bd.fly();
}
void func2(bird*pb){pb->fly();
}int main(){bird bd;penguin pg;bd.fly();//bird::fly()func1(bd);//bird::fly()func2(&bd);//bird::fly()pg.fly();//penguin::fly()func1(pg);//penguin::fly()func2(&pg);//penguin::fly()getchar();return 0;
}
總結
以上是生活随笔為你收集整理的C++中的两种绑定方式(静态绑定、动态绑定)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++中的public,protecte
- 下一篇: C++中的类属(泛型)机制——模板