鉴于我们在基类中重载了方法,并且派生类继承为private/protected.
代码段:
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??
};
Run Code Online (Sandbox Code Playgroud)
using不能在给定的重载上有选择地通过声明更改继承函数的可访问性,原因很简单,即using声明仅将名称引入声明区域,并且根据定义,函数重载共享相同的名称。
我在这里看到的唯一替代方法是使用简单的转发功能:
class derived : private base
{
public:
void method() { base::method(); }
using base::method2; // method2 is now public
// method(int) stays inaccessible
};
Run Code Online (Sandbox Code Playgroud)
我不太确定我理解您的第二个问题,但是是的:您可以通过using声明更改派生类中的基成员可访问性。