【发布时间】:2012-07-03 10:17:20
【问题描述】:
有没有办法阻止某人更改继承的受保护成员的访问级别?
有人可以在派生类中使用using 声明,并将继承的受保护成员的访问级别提高到公共。
现在的问题是如何防止这种情况发生?
示例:
#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;
}
【问题讨论】:
-
每个人都可以正常访问受保护的字段,那么您为什么还要这样做呢?
-
如果每个人都可以访问它们,那么它们为什么存在?
-
@hamed:它们的存在是为了防止意外违反封装。没有办法防止像这样的故意违规,即使你想这样做,所以仅仅阻止最直接的方法是没有意义的。
-
@hamed 您的“如何预防”部分是错误的。您不能有两个同名的成员
A::i和A::i()。即使没有using A::i... -
你是对的,这只能与成员函数一起使用