ページ 11

子クラスの、親クラスのメンバ参照について

Posted: 2014年3月28日(金) 13:34
by フイ
子クラスは、その親クラスが持つメンバ変数に自由にアクセスできると聞いたので
下のようなプログラムを書きました。

class Oya
{
private:
int x,y;

class Kodomo
{
public:
Kodomo();
} ;

public:
Oya();
};

Oya::Kodomo::Kodomo()
{
x=0;
y=0;
}

すると、「静的でないメンバー参照は特定のオブジェクトを基準とする相対参照である必要があります」
というメッセージが出てエラーになります。
調べてみると、宣言の前にstaticをつけると静的なメンバー変数というものになるらしいので
static int x,y;
に書き換えてみたら、今度は「外部参照が未解決です」といったエラーがでます。

どうすれば子クラスで、親クラスのメンバ変数の値をいじれるのでしょうか?

Re: 子クラスの、親クラスのメンバ参照について

Posted: 2014年3月28日(金) 13:45
by usao
クラスの関係はともかく,メンバを操作するならインスタンスを指定する必要があります.
「どのOya型インスタンスの」メンバ変数にアクセスするの? っていうことですね.

Re: 子クラスの、親クラスのメンバ参照について

Posted: 2014年3月28日(金) 13:49
by softya(ソフト屋)
この場合、子クラスではなくインナークラス(内部)ですね。
メンバー参照出来ないのはインスタンスが無い性なので、参照するためにはOya::Kodomo::KodomoがOyaのインスタンスを受け取る必要があります。
通常子クラスと言う呼び名は継承関係にあるときに使います。

ちなみに
static int x,y;
はちょっと意味が違うので意図的に必要ないならやらないほうが良いです。

Re: 子クラスの、親クラスのメンバ参照について

Posted: 2014年3月29日(土) 01:46
by へにっくす
フイ さんが書きました:子クラスは、その親クラスが持つメンバ変数に自由にアクセスできる
子クラスとは普通、「派生クラス」のことです。
貴方が言ってるのはsoftyaさんが言う通り、「内部クラス」ですね。
以下のページを参照すると幸せになれるかもしれません。
その13 内部クラスは外側クラスのメンバにアクセスし放題!

Re: 子クラスの、親クラスのメンバ参照について

Posted: 2014年3月29日(土) 17:51
by ISLe
ちなみにJavaだと内部クラス(インナークラス:inner class)は外側とインスタンスで結び付くのでフイさんの思った通りのことができます。
外側と定義で結び付くクラスは、入れ子クラス(ネストクラス:nested class)と呼ばれ区別されます。
内部クラスも入れ子クラスの一形態ですけど。

C++も『内部クラス』ではなく『入れ子クラス』と言語規格には書かれています。

Re: 子クラスの、親クラスのメンバ参照について

Posted: 2014年4月01日(火) 22:17
by フイ
解決できました。ありがとうございました。