虛函數和函數重載的問題


虛函數是類的成員函數,虛函數體現了運行時的多態性,編譯時的多態性由函數重載和運算符重載等體現
虛函數和函數重載都體現了多態性,但他們的表現形式不一樣,函數重載調用根據參數的個數、參數的類型進行區分,而虛函數則是根據動態聯編(運行時的多態性)來確定的。

#include <iostream>
using namespace std; class A { public: int fun(int a){return a;} int fun(int a,int b){return a+b;} virtual float fun(float c){return c;} virtual void f()=0;//純虛函數
}; class B:public A { public: int fun(int a) { return a+10; } int fun(int a,int b) { return a+b+10; } float fun(float c) { return c+10.0; } void f() { cout<<"子類不重寫純虛函數,父類不能實例化,且子類繼承父類必須實例化純虛函數"<<endl; } }; 
/*函數的重載*/
int fun(int a) { return a; } int fun(int a,int b) { return a+b; } float fun(float a) { return a; } int main() { int a=fun(1); int b=fun(1,2); float c=1.23; float d=fun(c); cout<<a<<' '<<b <<' '<<d<<endl; // A aa;擁有純虛函數,不能初始化 A *aa=new B; cout<<aa->fun(1)<<' '<<aa->fun(1,2)<<' '<<aa->fun(float(1.23))<<endl; B *bb=new B; cout<<bb->fun(1)<<' '<<bb->fun(1,2)<<' '<<bb->fun(float(1.23))<<endl; aa->f(); bb->f();return 0; }

輸出:
1 3 1.23
1 3 11.23
11 13 11.23
子類不重寫純虛函數,父類不能實例化,且子類繼承父類必須實例化純虛函數
子類不重寫純虛函數,父類不能實例化,且子類繼承父類必須實例化純虛函數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM