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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
しょう

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

#1

投稿記事 by しょう » 10年前

下記のようなクラスAがあった場合に、funcBからクラスBのidとクラスAのidの双方にアクセスしたい場合にはどのように記述すれば良いでしょうか

コード:

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

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




かずま

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

#2

投稿記事 by かずま » 10年前

しょう さんが書きました:下記のようなクラス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 の両方にアクセスするにはどうすればよいか
分かりますか?

naohiro19
記事: 256
登録日時: 14年前
住所: 愛知県

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

#3

投稿記事 by naohiro19 » 10年前

C++ではメンバー変数はprivateなので
BクラスからAクラスのメンバー変数にアクセスできません。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

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

#4

投稿記事 by みけCAT » 10年前

naohiro19 さんが書きました:C++ではメンバー変数はprivateなので
× メンバー変数はprivateなので
〇 classのメンバー変数はデフォルトではprivateなので
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

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

#5

投稿記事 by usao » 10年前

>privateなので
>BクラスからAクラスのメンバー変数にアクセスできません。

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

かずま

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

#6

投稿記事 by かずま » 10年前

コード:

#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
と書くしかないと思います。

ISLe()

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

#7

投稿記事 by ISLe() » 10年前

C++では、入れ子クラス(nest class)ではありますが、内部クラス(inner class)ではありません。

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

かずま

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

#8

投稿記事 by かずま » 10年前

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();
    }
}

閉鎖

“C言語何でも質問掲示板” へ戻る