防止更改继承的受保护成员的访问级别

时间:2012-07-03 10:17:20

标签: c++ oop

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

1 个答案:

答案 0 :(得分:3)

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