仮想関数にアクセスします。
仮想 の関数に適用されるアクセス制御とは関数呼び出しに使用する型によって決まります。関数をオーバーライドする宣言で指定された型のアクセス制御には影響しません。次に例を示します。
// 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;
}
前の例ではポインターを使用します VFuncBase の呼び出し VFuncDerived::GetState を入力する仮想関数 GetState と GetState を呼び出すとパブリックとして扱われます。ただしVFuncDerived を入力するためのポインターを使用して GetState を呼び出すことが GetState が VFuncDerived クラスにプライベートとして宣言されているためアクセス違反が発生します。
注意 |
---|
仮想関数 GetState は基本クラス VFuncBase へのポインターを使用して呼び出すことができます。これは呼び出された関数がこの関数の基本クラス バージョンであることを示します。 |