重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

クラス内で上位クラス内メンバの値を変更

test2Objクラス内で
test1Objメンバ内のtest1Valueの値を2に変えたい
このような事は可能でしょうか?
================================
class Test2Obj{
public:
void changeValue(){
//ここでtest1Objメンバ内のtest1Valueの値を2に変えたい
}
};

class Test1Obj{
public:
int test1Value;
Test2Obj *test2Obj;

//コンストラクタ
Test1Obj(int tmp_test1Value){
setTest1Value(tmp_test1Value);
test2Obj=new Test2Obj();
}
void setTest1Value(int tmp_test1Value){test1Value=tmp_test1Value;}

};

int main(void){

Test1Obj *test1Obj=new Test1Obj(1);

printf(">>>%d\n",test1Obj->test1Value);

//ここでtest1Obj->test1Valueの値を変えたい
test1Obj->test2Obj->changeValue();

}
================================
もしコードに問題があればご指摘をお願いします。

A 回答 (1件)

#include <stdio.h>



class Test2Obj;

class Test1Obj{
public:
int test1Value;
Test2Obj *test2Obj;
Test1Obj( int tmp_test1Value );
void setTest1Value( int tmp_test1Value ){ test1Value = tmp_test1Value; }
};

class Test2Obj{
Test1Obj *owner;
public:
Test2Obj( Test1Obj *it ) : owner( it ) {}
void changeValue(int v){ owner->setTest1Value( v ); }
};

Test1Obj::Test1Obj( int tmp_test1Value ){ setTest1Value( tmp_test1Value ); test2Obj = new Test2Obj( this ); }
int main(void){
Test1Obj *test1Obj = new Test1Obj( 1 ); printf( ">>>%d\n", test1Obj->test1Value );
test1Obj->test2Obj->changeValue( 2 ); printf( ">>>%d\n", test1Obj->test1Value );
}
    • good
    • 0
この回答へのお礼

おお!
凄い。

ちょっと複雑なのになると、クラスを書く順番と
関数を書く順番を注意しないとこんがらがっちゃいそうですね。

C++の奥深さを垣間見ました。
ありがとうございます。

お礼日時:2010/10/11 21:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!