C++ 防止更改继承的受保护成员的访问级别
是否有方法阻止某人更改继承的受保护成员的访问级别? 有人可以在派生类中使用声明来使用C++ 防止更改继承的受保护成员的访问级别,c++,oop,C++,Oop,是否有方法阻止某人更改继承的受保护成员的访问级别? 有人可以在派生类中使用声明来使用,并提高继承的受保护成员对公共的访问级别 现在的问题是如何防止这种情况 示例: #include <iostream> using namespace std; class A { protected: int i(){}; }; class B : public A { public: using A::i; }; int main() { B b; b.i();
,并提高继承的受保护成员对公共的访问级别
现在的问题是如何防止这种情况
示例:
#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;
}
#包括
使用名称空间std;
甲级{
受保护的:
int i(){};
};
B类:公共A{
公众:
使用A::i;
};
int main(){
B B;
b、 i();
返回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;
}
#包括
使用名称空间std;
甲级{
私人:
void i(int){};
受保护的:
int i(){};
};
B类:公共A{
公众:
使用A::i;
};
int main(){
B B;
b、 i();
返回0;
}
您不能。即使可以使用
指令阻止,派生类仍然可以简单地公开一个新的公共字段,该字段是指向受保护成员的指针或引用,或者公开一个返回此类指针或引用的公共成员函数。每个人都可以访问受保护字段,那么你为什么要这么做呢?如果每个人都可以访问它们,那么它们为什么会存在呢?@hamed:它们的存在是为了防止意外破坏封装。即使你愿意,也没有办法阻止这样的故意违规行为,因此,仅仅阻止最直接的方式是没有意义的。@hamed你的“如何防止”部分是错误的。您不能有两个同名的成员A::i
和A::i()
。即使没有使用A::i
…你是对的,这只适用于成员函数。最后我发现,如果我定义了一个名为i
的伪私有方法,那么派生类就不能使用A::i使用
@hamed如果您的“如何预防”示例中没有类B
,您的类A
将不会编译事件。。。您不能有两个同名的成员…class B:public A{public:void i(){A::i();}代码>如您所见-在使用方法的情况下-您可以不使用而直接使用
。。。