Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 防止更改继承的受保护成员的访问级别_C++_Oop - Fatal编程技术网

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();}如您所见-在使用方法的情况下-您可以不使用
而直接使用
。。。