鉴于我们在基类中重载了方法,并且派生类继承为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??
};
答案 0 :(得分:4)
通过using
声明更改继承函数的可访问性无法在给定的重载上有选择地完成,原因很简单,因为using
声明只引入了 名称 < / strong>进入声明区域,根据定义,函数重载共享相同的名称。
我在这里看到的唯一选择是使用简单的转发功能:
class derived : private base
{
public:
void method() { base::method(); }
using base::method2; // method2 is now public
// method(int) stays inaccessible
};
我不太确定我理解你的第二个问题,但是:你可以通过using
声明更改派生类中的基本成员可访问性。
答案 1 :(得分:1)
您本身并不恢复访问权限。您设置访问权限。正如您在上面所做的那样,您可以显式设置任何方法的访问权限,包括之前声明为private
的方法。
答案 2 :(得分:1)
如果派生类想要保护受保护的方法,那么就不可能阻止它被公开,因为你可以编写一个小的包装并完成。 private
是另一回事。