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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
フイ
記事: 11
登録日時: 10年前

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

#1

投稿記事 by フイ » 10年前

子クラスは、その親クラスが持つメンバ変数に自由にアクセスできると聞いたので
下のようなプログラムを書きました。

class Oya
{
private:
int x,y;

class Kodomo
{
public:
Kodomo();
} ;

public:
Oya();
};

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

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

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

アバター
usao
記事: 1887
登録日時: 11年前

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

#2

投稿記事 by usao » 10年前

クラスの関係はともかく,メンバを操作するならインスタンスを指定する必要があります.
「どのOya型インスタンスの」メンバ変数にアクセスするの? っていうことですね.

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

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

#3

投稿記事 by softya(ソフト屋) » 10年前

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

ちなみに
static int x,y;
はちょっと意味が違うので意図的に必要ないならやらないほうが良いです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
へにっくす
記事: 634
登録日時: 11年前
住所: 東京都

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

#4

投稿記事 by へにっくす » 10年前

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

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

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

#5

投稿記事 by ISLe » 10年前

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

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

フイ
記事: 11
登録日時: 10年前

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

#6

投稿記事 by フイ » 10年前

解決できました。ありがとうございました。

閉鎖

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