#include <iostream>using namespace std;class A{public:virtual void func();virtual int operator=(int n);virtual A& operator= (const A&);};void A::func(){cout<<"A::func()"<<endl;}int A::operator=(int n){cout<<"A::operator=(int)"<<endl;return n;}A& A::operator=(const A&){cout<<"A::operator=(const A&)"<<endl;return *this;}class B : public A{public:virtual void func();virtual int operator=(int n);/*注意這裡是(const A&)*/virtual B& operator=(const A&);/*如果沒有重載<operator=(const B&)>時,B會調用預設的賦值函數, 就會找到virtual A& operator= (const A&);*/virtual B& operator=(const B&);};void B::func(){cout<<"B::func()"<<endl;}int B::operator=(int n){cout<<"B::operator=(int)"<<endl;return n;}B& B::operator=(const A&){cout<<"B::operator=(const A&)"<<endl;return *this;}B& B::operator=(const B&){cout<<"B::operator=(const B&)"<<endl;return *this;}int main(){B b1;B b2;A* pa = &b1;pa->func();// 調用<void B::func()>pa->operator=(0);// 調用<int B::operator=(int n)>*pa = 99;// 調用<int B::operator=(int n)>pa->operator=(b2);// 調用<B& B::operator=(const A&)>*pa = b2;// 調用<B& B::operator=(const A&)>b1 = b2;// 調用預設的賦值函數}結果如下:D:\localsvn\project\test\release>test.exeB::func()B::operator=(int)B::operator=(int)B::operator=(const A&)B::operator=(const A&)B::operator=(const B&)