3

派生クラスがある場合、次以外のメソッドから変数を参照する簡単な方法はありますか?

BaseClass::variable

編集
たまたま、代わりに関数を使用してこの問題を説明するページを見つけました: Template-Derived-Classes Errors。テンプレートクラスを使用すると明らかに違いがあります。

4

2 に答える 2

10

基本クラスのメンバー変数が保護されているか公開されている場合は、派生クラスの任意のメンバー関数で名前で参照できます。基本クラスに対してプライベートである場合、コンパイラは派生クラスがそれにアクセスすることをまったく許可しません。例:


class Base
{
protected:
  int a;

private:
  int b;
};

class Derived : public Base
{
  void foo()
  {
    a = 5;  // works
    b = 10; // error!
  }
};

また、すべてのメンバー変数をプライベートに保ち、必要に応じてゲッターとセッターを提供することについても言及する必要があります。

また、データ メンバーを「隠す」ことに注意してください。


class Base
{
public:
  int a;
};

class Derived : public Base
{
public:
  int a;
};

これにより、 という名前の 2 つの変数が作成されます。one ain Base、one inDerivedであり、混乱やバグにつながる可能性があります。

于 2008-10-27T18:05:44.110 に答える
1

関連: C++ で「super」を使用する

于 2008-10-27T18:16:06.603 に答える