using 宣言およびクラス・メンバー

C++クラス A の定義での using 宣言により、 データ・メンバーまたはメンバー関数の名前 を、A の基底クラスから A のスコープに導入できます。

規定および派生クラスからメンバー関数の多重定義セットを作成したい場合、 またはクラス・メンバーのアクセスを変更したい場合は、 クラス定義で using 宣言が必要です。

構文 - using 宣言
 
>>-using--+-+----------+--+----+--nested_name_specifier--unqualified_id--;-+-><
          | '-typename-'  '-::-'                                           |
          '-::--unqualified_id--;------------------------------------------'
 
 

クラス A の using 宣言は、次のいずれかに名前を付けます。

次の例は、このことを示しています。

struct Z {
  int g();
};
 
struct A {
  void f();
  enum E { e };
  union { int u; };
};
 
struct B : A {
  using A::f;
  using A::e;
  using A::u;
//  using Z::g;
};

コンパイラーは、ZA の基底クラスでないので、using 宣言 using Z::g を許可しません。

using 宣言は、テンプレートに名前を付けることはできません。 例えば、コンパイラーは、次の表記を許可しません。

struct A {
  template<class T> void f(T);
};
 
struct B : A {
  using A::f<int>;
};

using 宣言で示されている名前のインスタンスは、どれもアクセス可能でなければなりません。 次の例は、このことを示しています。

struct A {
private:
  void f(int);
public:
  int f();
protected:
  void g();
};
 
struct B : A {
//  using A::f;
  using A::g;
};

コンパイラーは、int A::f() はアクセス可能ですが、void A::f(int)B からアクセス不可能なので、using 宣言 using A::f を許可しません。

関連参照

IBM Copyright 2003