程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++的靜態綁定和動態綁定概述

C++的靜態綁定和動態綁定概述

編輯:關於C++

C++在面向對象編程中,存在著靜態綁定和動態綁定的定義,本節即是主要講述這兩點區分。

我是在一個類的繼承體系中分析的,因此下面所說的對象一般就是指一個類的實例。

首先我們需要明確幾個名詞定義:

靜態類型:對象在聲明時采用的類型,在編譯期既已確定;

動態類型:通常是指一個指針或引用目前所指對象的類型,是在運行期決定的;

靜態綁定:綁定的是靜態類型,所對應的函數或屬性依賴於對象的靜態類型,發生在編譯期;

動態綁定:綁定的是動態類型,所對應的函數或屬性依賴於對象的動態類型,發生在運行期;

從上面的定義也可以看出,非虛函數一般都是靜態綁定,而虛函數都是動態綁定(如此才可實現多態性)。

先看代碼和運行結果:

class A
{
public:
    /*virtual*/ void func(){ std::cout << "A::func()\n"; }
};
class B : public A
{
public:
    void func(){ std::cout << "B::func()\n"; }
};
class C : public A
{
public:
    void func(){ std::cout << "C::func()\n"; }
};

下面逐步分析測試代碼及結果,

1 C* pc = new C(); //pc的靜態類型是它聲明的類型C*,動態類型也是C*;

2 B* pb = new B(); //pb的靜態類型和動態類型也都是B*;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved