2011年4月30日 星期六

C++: virtual function

C++: virtual function
http://blog.yam.com/swwuyam/article/12114648

C++中的虛函數(virtual function)
http://www.programfan.com/article/2782.html

基類聲明的虛函數,在派生類中也是虛函數,即使不再使用virtual關鍵字。

一個函數聲明為純虛後,純虛函數的意思是:我是一個抽象類!不要把我實例化!

析構=解構

當一個類打算被用作其它類的基類時,它的析構函數必須是虛的。

純虛的析構函數並沒有什麼作用,是虛的就夠了。通常只有在希望將一個類變成抽象類(不能實例化的類),而這個類又沒有合適的函數可以被純虛化的時候,可以使用純虛的析構函數來達到目的。

2.4 虛構造函數?
    構造函數不能是虛的。

3. 虛函數使用技巧 3.1 private的虛函數
    考慮下面的例子:

class A
{
public:
    void foo() { bar();}
private:
    virtual void bar() { ...}
};

class B: public A
{
private:
    virtual void bar() { ...}
};

    在這個例子中,雖然bar()在A類中是private的,但是仍然可以出現在派生類中,並仍然可以與public或者protected的虛函數一樣產生多態的效果。並不會因為它是private的,就發生A::foo()不能訪問B::bar()的情況,也不會發生B::bar()對 A::bar()的override不起作用的情況。

    這種寫法的語意是:A告訴B,你最好override我的bar()函數,但是你不要管它如何使用,也不要自己調用這個函數。


3.2 構造函數和析構函數中的虛函數調用
    一個類的虛函數在它自己的構造函數和析構函數中被調用的時候,它們就變成普通函數了,不「虛」了。也就是說不能在構造函數和析構函數中讓自己「多態」。
Why?

沒有留言:

張貼留言