共用方式為


虛擬函式的存取

存取控制套用至虛擬函式由用來進行呼叫的函式的型別。 函式的覆寫宣告不會影響指定型別的存取控制。 例如:

// 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。這並不表示呼叫的函式是該函式的基底類別版本。

請參閱

參考

成員存取控制