2

誰かが継承された保護されたメンバーのアクセス レベルを変更できないようにする方法はありますか? 誰かが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;
}
4

1 に答える 1

3

それはいけません。ディレクティブを回避できたとしてもusing、派生クラスは、保護されたメンバーへのポインターまたは参照である新しいパブリック フィールド、またはそのようなポインターまたは参照を返すパブリック メンバー関数を単純に公開できます。

于 2012-07-03T10:20:19.377 に答える