有没有办法阻止某人更改继承的受保护成员的访问级别?
有人可以在派生类中使用using
声明,并将继承的受保护成员的访问级别提高到public。
现在问题是如何防止这种情况?
示例:
#include <iostream>
using namespace std;
class A {
protected:
int i(){};
};
class B : public A {
public:
using A::i;
};
int main() {
B b;
b.i();
return 0;
}
如何预防
#include <iostream>
using namespace std;
class A {
private:
void i(int) {};
protected:
int i(){};
};
class B : public A {
public:
using A::i;
};
int main() {
B b;
b.i();
return 0;
}
答案 0 :(得分:3)
你做不到。即使你可以阻止using
指令,派生类仍然可以简单地公开一个新的公共字段,它是一个指向受保护成员的指针或引用,或者是一个返回这样一个指针或引用的公共成员函数。