在C++中,純虛函數(shù)和虛函數(shù)都與面向?qū)ο缶幊讨械亩鄳B(tài)性有關(guān),但它們之間存在一些區(qū)別。
1、純虛函數(shù)(Pure Virtual Function):
純虛函數(shù)是在基類中聲明的沒(méi)有實(shí)際實(shí)現(xiàn)的虛函數(shù)。
通過(guò)將函數(shù)聲明為純虛函數(shù),可以使基類成為抽象類,這意味著它不能直接實(shí)例化對(duì)象。
子類必須實(shí)現(xiàn)純虛函數(shù),否則子類也將成為抽象類。
聲明純虛函數(shù)的語(yǔ)法是在函數(shù)聲明末尾加上 “= 0″:virtual void functionName() = 0;
示例:
class Base {
pubpc:
virtual void pureVirtualFunction() = 0; // 純虛函數(shù)
};
class Derived : pubpc Base {
pubpc:
void pureVirtualFunction() override {
// 子類必須實(shí)現(xiàn)純虛函數(shù)
// 具體的實(shí)現(xiàn)代碼
}
};
2、虛函數(shù)(Virtual Function):
虛函數(shù)是在基類中聲明并使用關(guān)鍵字 “virtual” 的函數(shù)。
虛函數(shù)可以被子類重寫(override),并且根據(jù)實(shí)際調(diào)用的對(duì)象類型動(dòng)態(tài)地決定調(diào)用哪個(gè)函數(shù)實(shí)現(xiàn)。
基類指針或引用可以用于調(diào)用虛函數(shù),實(shí)現(xiàn)運(yùn)行時(shí)多態(tài)。
示例:
class Base {
pubpc:
virtual void virtualFunction() {
// 基類的虛函數(shù)實(shí)現(xiàn)
}
};
class Derived : pubpc Base {
pubpc:
void virtualFunction() override {
// 子類重寫了基類的虛函數(shù)
// 具體的實(shí)現(xiàn)代碼
}
};
總結(jié):
純虛函數(shù)是沒(méi)有實(shí)際實(shí)現(xiàn)的虛函數(shù),用于定義接口和創(chuàng)建抽象類。
虛函數(shù)是在基類中聲明并有默認(rèn)實(shí)現(xiàn)的函數(shù),可以被子類重寫,并通過(guò)運(yùn)行時(shí)多態(tài)性進(jìn)行動(dòng)態(tài)分派。