虛擬函式的存取
存取控制套用至虛擬函式由用來進行呼叫的函式的型別。 函式的覆寫宣告不會影響指定型別的存取控制。 例如:
// access_to_virtual_functions.cpp
class VFuncBase
{
public:
virtual int GetState() { return _state; }
protected:
int _state;
};
class VFuncDerived : public VFuncBase
{
private:
int GetState() { return _state; }
};
int main()
{
VFuncDerived vfd; // Object of derived type.
VFuncBase *pvfb = &vfd; // Pointer to base type.
VFuncDerived *pvfd = &vfd; // Pointer to derived type.
int State;
State = pvfb->GetState(); // GetState is public.
State = pvfd->GetState(); // C2248 error expected; GetState is private;
}
在上述範例中,呼叫虛擬函式GetState使用指標,以鍵入VFuncBase呼叫VFuncDerived::GetState,以及GetState會被視為公用。 不過,呼叫GetState使用指標,以鍵入VFuncDerived是存取控制的違規情形,因為GetState宣告為私用類別在VFuncDerived。
警告
虛擬函式GetState可以使用的基底類別指標呼叫VFuncBase。這並不表示呼叫的函式是該函式的基底類別版本。