私有虚函数

更新:2007 年 11 月

从 C++ 托管扩展到 Visual C++ 2008,处理派生类中私有虚函数的方式已发生更改。

在托管扩展中,虚函数的访问级别不约束它在派生类内部被重写的能力。在新语法中,虚函数无法重写无法访问的基类虚函数。例如:

__gc class Foo {
   // inaccessible to a derived class 
   virtual void g();
};

__gc class Bar : public Foo {
public:
   // in Managed Extensions, ok: g() overrides Foo::g()
   // in new syntax, error: cannot override: Foo::g() is inaccessible …
   void g();
};

新语法上没有此类设计的真正映射。只得使基类成员可访问 — 即非私有基类。继承的方法不必具有相同的访问。在本例中,侵害性最小的更改是使 Foo 成员 protected。这样,仍然禁止常规程序通过 Foo 访问该方法,

ref class Foo {
protected:
   virtual void g();
};

ref class Bar : Foo {
public:
   virtual void g() override;
};

请注意:在新语法中,基类中没有显式 virtual 关键字将生成警告消息。

请参见

概念

类或接口中的成员声明

参考

Member Visibility