類繼承時的虛函數調用關係

來源:互聯網
上載者:User
#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&)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.