子クラスは、その親クラスが持つメンバ変数に自由にアクセスできると聞いたので
下のようなプログラムを書きました。
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: 子クラスの、親クラスのメンバ参照について
クラスの関係はともかく,メンバを操作するならインスタンスを指定する必要があります.
「どのOya型インスタンスの」メンバ変数にアクセスするの? っていうことですね.
「どのOya型インスタンスの」メンバ変数にアクセスするの? っていうことですね.
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 子クラスの、親クラスのメンバ参照について
この場合、子クラスではなくインナークラス(内部)ですね。
メンバー参照出来ないのはインスタンスが無い性なので、参照するためにはOya::Kodomo::KodomoがOyaのインスタンスを受け取る必要があります。
通常子クラスと言う呼び名は継承関係にあるときに使います。
ちなみに
static int x,y;
はちょっと意味が違うので意図的に必要ないならやらないほうが良いです。
メンバー参照出来ないのはインスタンスが無い性なので、参照するためにはOya::Kodomo::KodomoがOyaのインスタンスを受け取る必要があります。
通常子クラスと言う呼び名は継承関係にあるときに使います。
ちなみに
static int x,y;
はちょっと意味が違うので意図的に必要ないならやらないほうが良いです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 子クラスの、親クラスのメンバ参照について
子クラスとは普通、「派生クラス」のことです。フイ さんが書きました:子クラスは、その親クラスが持つメンバ変数に自由にアクセスできる
貴方が言ってるのはsoftyaさんが言う通り、「内部クラス」ですね。
以下のページを参照すると幸せになれるかもしれません。
その13 内部クラスは外側クラスのメンバにアクセスし放題!
written by へにっくす
Re: 子クラスの、親クラスのメンバ参照について
ちなみにJavaだと内部クラス(インナークラス:inner class)は外側とインスタンスで結び付くのでフイさんの思った通りのことができます。
外側と定義で結び付くクラスは、入れ子クラス(ネストクラス:nested class)と呼ばれ区別されます。
内部クラスも入れ子クラスの一形態ですけど。
C++も『内部クラス』ではなく『入れ子クラス』と言語規格には書かれています。
外側と定義で結び付くクラスは、入れ子クラス(ネストクラス:nested class)と呼ばれ区別されます。
内部クラスも入れ子クラスの一形態ですけど。
C++も『内部クラス』ではなく『入れ子クラス』と言語規格には書かれています。