私有虚函数

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

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

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

__gc class MyDerivedClass : public MyBaseClass {
public:
   // okay in Managed Extensions; g() overrides MyBaseClass::g()
   // error in new syntax; cannot override: MyBaseClass::g() is inaccessible …
   void g();
};

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

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

ref class MyDerivedClass : MyBaseClass {
public:
   virtual void g() override;
};

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

请参见

参考

Member Visibility

概念

类或接口中的成员声明