虛函數:在虛函數的聲明的參數列表之後加上“=0”就將函數變成了純虛函數,如:
[cpp]
class Base
{
virtual void function()=0;
}
class Base
{
virtual void function()=0;
}我們不需要為純虛函數Base::function()提供任何定義,那些聲明了純虛函數的類就是抽象類。任何試圖創建一個抽象類對象的操作都會導致編譯器錯誤。
如果一個類派生子Base並且重寫了Base::function()函數,它就成為了具體的類了。
[cpp]
class Derived :public Basae
{
void function();
}
class Derived :public Basae
{
void function();
}
我們通常將抽象類用作接口聲明,這時我們不需要為該接口聲明一個完整的實現,該接口描述了所有派生自該類的對象都應該支持的操作;派生類必須實現這些抽象操作。
[cpp]
class Base
{
public:
virtual void print()=0;
};
class Derived :public Base
{
public:
virtual void print()
{
cout<<"Derived::Derived()\n";
}
~Derived()
{
print();
}
};
int main()
{
Derived D;
Base* ptr=&D;
D.print();
}
class Base
{
public:
virtual void print()=0;
};
class Derived :public Base
{
public:
virtual void print()
{
cout<<"Derived::Derived()\n";
}
~Derived()
{
print();
}
};
int main()
{
Derived D;
Base* ptr=&D;
D.print();
}運行結果:
Derived::Derived()
Derived::Derived()
第一個Derived::Derived()是通過D直接調用print()時所產生的輸出,第二個是在程序結束時調用~Derived()時產生的輸出。
雖然我們不可以直接創建抽象類的對象了,但是仍然可以使用指向Base的指針和引用。
比如: Base* ptr= &D;