假设我们在基类中重载了方法,并且派生了作为私有(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??
};
最佳答案
通过using
声明更改继承函数的可访问性不能在给定的重载上有选择地完成,原因很简单,因为using
声明仅将名称引入了声明性区域,并且根据定义,函数重载具有相同的名称。
我在这里看到的唯一替代方法是使用琐碎的转发功能:
class derived : private base
{
public:
void method() { base::method(); }
using base::method2; // method2 is now public
// method(int) stays inaccessible
};
我不太确定我是否理解您的第二个问题,但是是的:您可以通过
using
声明来更改派生类中的基本成员可访问性。关于c++ - 基类重载方法的访问声明,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4607197/