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?
沒有留言:
張貼留言