gpt4 book ai didi

c++ - 基类重载方法的访问声明

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:32:47 26 4
gpt4 key购买 nike

鉴于我们在基类中有重载方法,并且派生类被继承为私有(private)/ protected 。

  1. 我们能否只恢复重载方法的一个/几个原始访问级别?
  2. 在 GCC 4.4.0 上,我尝试将基本方法置于 protected 访问之下,然后使用私有(private)访问继承它。当我尝试将访问级别恢复为公共(public)时,它起作用了!这是它应该如何工作吗?还是编译器上的错误?据我了解,恢复访问级别不能用于提升或降低成员的访问级别。

代码片段:

class base {
public:
void method() {}
void method(int x) {}
protected:
void method2() {}
};

class derived : private base {
public:
base::method; // Here, i want to restore only the none parameterized method
base::method2; // method2 is now public??
};

最佳答案

通过 using 声明更改继承函数的可访问性不能在给定重载上有选择地完成,原因很简单,using 声明仅引入 name 进入声明区域,并且根据定义,函数重载共享相同的名称。

我在这里看到的唯一选择是使用简单的转发功能:

class derived : private base
{
public:
void method() { base::method(); }

using base::method2; // method2 is now public
// method(int) stays inaccessible
};

我不太确定我是否理解您的第二个问题,但是是的:您可以通过使用 声明更改派生类中的基本成员可访问性。

关于c++ - 基类重载方法的访问声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4607197/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com