簡單寫個示例:【VS2012編譯運行通過】
頭文件,定義一個類模板(含有虛函數)和需要用到的實例化參數類
#ifndef _PEOPLE_H #define _PEOPLE_H #include <iostream> using namespace std; class pq1; class pq2; template<class T,class D> class people { public: T age; people() {} ~people() {} virtual void out() { cout<<"base"<<endl; } void print() { cout<<"base_print"<<endl; } private: }; class BlackP { public: BlackP(); ~BlackP(); void print(); void b_print(); static string area; private: }; BlackP::BlackP() { } BlackP::~BlackP() { } void BlackP::print() { cout<<"b_self_print"<<endl; } void BlackP::b_print() { cout<<"b_self_B_print"<<endl; } class WhiteP { public: WhiteP(); ~ WhiteP(); void print(); void w_print(); private: }; WhiteP:: WhiteP() { } WhiteP::~ WhiteP() { } void WhiteP::print() { cout<<"w_self_print"<<endl; } void WhiteP::w_print() { cout<<"w_self_W_print"<<endl; } class CommP { public: CommP(); ~CommP(); private: }; CommP::CommP() { } CommP::~CommP() { } #endif
CPP文件實例化類模板,並重寫類模板中的虛函數
#ifndef _PEOPLE_H #include"people.h" #endif #include<string> people<int,BlackP> p1; people<double,WhiteP> p2; string BlackP::area; void people<int,BlackP>::out() { cout<<"int_out"<<endl; //this->print(); BlackP::area="africa"; cout<<BlackP::area<<endl;//must include string.h if you want to cout string BlackP p; p.b_print(); } void people<double,WhiteP>::out() { cout<<"double_out"<<endl; WhiteP p; p.w_print(); } int main() { people<double,CommP> p0; p0.out(); p0.print(); p1.out(); p1.print(); p2.out(); system("pause"); }