2

有没有办法阻止某人更改继承的受保护成员的访问级别?有人可以在派生类中使用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;
}
4

1 回答 1

3

你不能。即使您可以阻止该using指令,派生类仍然可以简单地公开一个新的公共字段,该字段是对受保护成员的指针或引用,或者返回此类指针或引用的公共成员函数。

于 2012-07-03T10:20:19.377 回答