私有虚函数
更新: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 关键字将生成警告消息。