C++中派生类重写函数的访问权限
在C++中,派生类中的重写函数必须具有与基类中相同的访问权限。具体来说:
- 如果基类中的虚函数是公有的,那么派生类中重写这个函数时,可以是公有的、保护的或私有的。
- 如果基类中的虚函数是保护的,那么派生类中重写这个函数时,只能是保护的或私有的。
- 如果基类中的虚函数是私有的,那么派生类中无法直接重写这个函数,因为私有成员在派生类中不可见。
以下是一个示例代码,说明了派生类中重写函数的访问权限的规则:
#include <iostream>
class Base {
private:
virtual void foo() = 0; // 基类中的私有虚函数
public:
void callFoo() {
foo();
}
};
class Derived : public Base {
public: // 派生类中的重写函数声明为public
void foo() override { // 试图重写基类中的私有虚函数
std::cout << "Derived::foo() called" << std::endl;
}
};
int main() {
Derived d;
d.callFoo(); // 输出 "Derived::foo() called"
return 0;
}
在这个示例中,尽管派生类中的重写函数被声明为public
,但仍会产生编译错误,因为它们的访问权限不匹配。