c++延遲綁定

來源:互聯網
上載者:User

C++中基類和衍生類別遵循類型相容原則:即可用衍生類別的對象去初始化基類的對象,可用衍生類別的對象去初始化基類的引用,可用衍生類別對象的地址去初始化基類對象指標。
C++中動態綁定條件發生需要滿足2個條件:
1:只有指定為虛函數的成員函數才能進行動態綁定,成員函數預設為非虛函數,非虛函數不能進行動態綁定
2:必須通過基類類型的引用或指標進行函數調用
基類類型引用和指標的關鍵點在於靜態類型和動態類型可能不同:
1:什麼是靜態類型?就我的理解來說,所謂的靜態類型是指,當我們用上述引用或指標去調用非虛函數是,這是的引用和指標就是引種靜態類型的,它對非虛函數的調用是在編譯時間就確定了
2:從靜態類型的對立來看,所謂的動態類型也很明顯,當這個引用或指標調用了虛函數時,它就是動態類型,它的行為要到程式運行時才能定義
當我們用衍生類別去初始化基類的引用或指標後,假如調用的是非虛函數,那麼這時實際調用的函數是基類的函數;假如調用的是虛函數,那麼這是調用的是衍生類別自己定義的虛函數

下面是具體的例子來說明靜態類型和動態類型
class A{
    public:
       virtual void show(){cout<<"基類的show()"<<endl;}
       void get(){cout<<"基類的get()"<<endl;}
};
class B:public A{
       public:
       virtual void show(){cout<<“衍生類別的show()”<<endl;}
       void get(){cout<<"衍生類別的get()"<<endl;}
};
main:
   A a;
   B b;
   A &c=b;
   c.show();//show函數是虛函數,並且此時使用衍生類別的對象去初始化基類的引用,發生了動態綁定,調用的是實際類型B的show()----"衍生類別的show"
   c.get();//此時不滿足動態綁定的條件,c是靜態類型,結果是-------基類的get()

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.