ページ 11

[c++] クラス内クラスのメンバ関数から、外側クラスメンバへのアクセス

Posted: 2015年6月30日(火) 04:53
by しょう
下記のようなクラスAがあった場合に、funcBからクラスBのidとクラスAのidの双方にアクセスしたい場合にはどのように記述すれば良いでしょうか

コード:

class A{
  class B{
    int id;
    ...
    funcB(){...}
  }

  int id;
  ...
  funcA(){...};
}




Re: [c++] クラス内クラスのメンバ関数から、外側クラスメンバへのアクセス

Posted: 2015年7月01日(水) 22:27
by かずま
しょう さんが書きました:下記のようなクラスAがあった場合に、funcBからクラスBのidとクラスAのidの双方にアクセスしたい場合にはどのように記述すれば良いでしょうか

コード:

class A {
    int id;
    void funcA() { /***/ }
};

class B {
    int id;
    void funcB() { /***/ }
};

class B が class A の内側にない場合と同じですよ。
B::funcB() から B::id と A::id の両方にアクセスするにはどうすればよいか
分かりますか?

Re: [c++] クラス内クラスのメンバ関数から、外側クラスメンバへのアクセス

Posted: 2015年7月02日(木) 07:21
by naohiro19
C++ではメンバー変数はprivateなので
BクラスからAクラスのメンバー変数にアクセスできません。

Re: [c++] クラス内クラスのメンバ関数から、外側クラスメンバへのアクセス

Posted: 2015年7月02日(木) 08:48
by みけCAT
naohiro19 さんが書きました:C++ではメンバー変数はprivateなので
× メンバー変数はprivateなので
〇 classのメンバー変数はデフォルトではprivateなので

Re: [c++] クラス内クラスのメンバ関数から、外側クラスメンバへのアクセス

Posted: 2015年7月02日(木) 09:13
by usao
>privateなので
>BクラスからAクラスのメンバー変数にアクセスできません。

今回の場合, BはAの内部クラスだからアクセスできます.

Re: [c++] クラス内クラスのメンバ関数から、外側クラスメンバへのアクセス

Posted: 2015年7月02日(木) 13:57
by かずま

コード:

#include <iostream>

class A {
    class B {
        int id;
    public:
        B() : id(5) {}
        void funcB(A *pA) {
            std::cout << "A::B::id=" << id << ", A::id=" << pA->id << "\n";
        }
    };
    B b;  // B のインスタンス
    int id;
public:
    A() : id(3) {}
    void funcA() {
        b.funcB(this);  // A のインスタンスへのポインタを渡す
    }
};

int main()
{
    A a;  // A のインスタンス
    a.funcA();
}
class B のメンバ関数の funcB の中で、
class B のメンバ変数の id にアクセスする場合は、
this->id の代わりに id と書けますが、

class B のメンバ関数の funcB の中で、
class A のメンバ変数の id にアクセスする場合は、
(A のインスタンス).id または (A のインスタンスへのポインタ)->id
と書くしかないと思います。

Re: [c++] クラス内クラスのメンバ関数から、外側クラスメンバへのアクセス

Posted: 2015年7月02日(木) 22:06
by ISLe()
C++では、入れ子クラス(nest class)ではありますが、内部クラス(inner class)ではありません。

内部クラスではない入れ子クラスは、インスタンスによる結び付きがないので、外側のクラスのインスタンスに対して(暗黙の)参照はできません。

Re: [c++] クラス内クラスのメンバ関数から、外側クラスメンバへのアクセス

Posted: 2015年7月03日(金) 22:10
by かずま
Java では内部クラスですから、外側のクラスのインスタンスへの参照を明示的に
渡さなくても、A.this.id でアクセスできますね。

コード:

class A {
    class B {
        int id = 5;
        void funcB() {
            System.out.println("B.id = " + id);
            System.out.println("A.id = " + A.this.id);
        }
    }
    B b = new B();
    int id = 3;
    void funcA() {
        b.funcB();
    }
    public static void main(String[] args) {
        A a = new A();
        a.funcA();
    }
}