重写方法时访问说明符

Pra*_*yot 7 c++ overriding

假设您有一个使用访问说明符public定义虚方法的类.你能改变覆盖方法的访问说明符吗?我假设没有.寻找解释.

Nat*_*nst 7

答案是:有点.您只能更改派生类有权访问的成员的访问权限.继承类型无效 - 这仅控制继承成员的默认访问权限(遵循其他规则).

因此,您可以将基类的受保护成员设为公共或私有; 或基地的公共成员受保护或私人.但是,您不能将基地的私人成员公开或受到保护.

例:

class Foo
{
protected:
        void protected_member();

private:
        void private_member();

public:
        void public_member();
};

class Bar : private Foo
{
public:
        using Foo::protected_member;
        using Foo::private_member;
        using Foo::public_member;
};

int main(int, const char**)
{
        Bar bar;

        return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码在g ++ 4.1.2上引发了以下错误:

main.C:7:错误:'void Foo :: private_member()'是私有的

main.C:14:错误:在此上下文中

此外,覆盖与更改方法的访问权限无关.您可以覆盖虚拟私有方法,您无法从派生类中调用它.


Uri*_*Uri 5

是的,你可以,但它“不理解”。

看一看在 C++ 中用私有函数覆盖公共虚函数