1. 程式人生 > >C++ 虛函數的使用

C++ 虛函數的使用

ios public 繼承 str 定義 spa 機制 called blog

虛函數是C++中用於實現多態(polymorphism)的機制。核心理念就是通過基類訪問派生類定義的函數。假設我們有下面的類層次:

#include <iostream>
using namespace std;

class A
{
public:
    virtual void foo() { cout << "A::foo() is called" << endl;}
};

class B: public A
{
public:
    virtual void foo() { cout << "B::foo() is called"
<< endl;} }; int main(){ A * a = new B(); a->foo(); // 在這裏,a雖然是指向A的指針,但是被調用的函數(foo)卻是B的! return 0; }
2.1 使用virtual關鍵字
考慮下面的類層次:
class A

{

public:

    virtual void foo();

};



class B: public A

{

public:

    void foo();    // 沒有virtual關鍵字!

};



class C: public B  //
從B繼承,不是從A繼承! { public: void foo(); // 也沒有virtual關鍵字! };


這種情況下,B::foo()是虛函數,C::foo()也同樣是虛函數。因此,可以說,基類聲明的虛函數,在派生類中也是虛函數,即使不再使用virtual關鍵字。

輸出的結果是

B::foo() is called

這個例子是虛函數的一個典型應用,通過這個例子,也許你就對虛函數有了一些概念。它虛就虛在所謂“推遲聯編”或者“動態聯編”上,一個類函數的調用並不是在編譯時刻被確定的,而是在運行時刻被確定的。由於編寫代碼的時候並不能確定被調用的是基類的函數還是哪個派生類的函數,所以被成為“虛”函數。

C++ 虛函數的使用