// main.cpp // OOP // 虛函數容許繼承層次結構中絕大多數特定版本的成員函數被選擇執行,虛函數使多態成爲可能。 // Created by mac on 2019/4/8. // Copyright © 2019年 mac. All rights reserved. #include <iostream> using namespace std; class Class1{ public: Class1(){} ~Class1(){} virtual void f(){ cout<<"Function f() in Class1"<<endl; } void g(){ cout<<"Function g() in Calss1"<<endl; } private: int a; }; //寫個類模版 template <class genType> class genClass { public: genClass(){} ~genClass(){} virtual void f(){ cout<<"Function f() in Class2"<<endl; } void g(){ cout<<"Function g() in Class2"<<endl; } private: genType a; }; class Class3{ public: Class3(){} ~Class3(){} //寫個函數模版 template <class genType> void h(genType a) { cout<<"Function h() in Class3"<<endl; } private: }; int main(int argc, const char * argv[]) { Class1 object1,*p; genClass<int> object2; Class3 object3,*q=&object3; p=&object1; //P指向object1 p->f(); p->g(); p=(Class1 *)&object2;// p指向object2 而且對類指針進行強制類型轉換 p->f(); p->g(); p=(Class1*)&object3; //p指向object3 而且對類指針進行強制類型轉換 //p->f();//編譯成功,運行出錯。 p->g(); // 輸出: Function g() in Calss1 // p->h(); //編譯出錯,在Class1 中找不到h //測試一下類Class3中的函數模版怎麼用 q->h(3); // 輸出: Function h() in Class3 q->h("jjjdscdjd"); // 輸出: Function h() in Class3 return 0; }
Function f() in Class1
Function g() in Calss1
Function f() in Class2
Function g() in Calss1
Function g() in Calss1
Function h() in Class3
Function h() in Class3
Program ended with exit code: 0ios