2016-12-06 8 views
1

コンパイラでオブジェクトをクラスからインスタンス化して別のクラスで使用できるようにする方法はありますか?あるいは、その問題を扱う優雅な方法は何ですか?例えばC++すでにインスタンス化されているオブジェクトを使用する

A.h

class A 
{ 
    int x; 
    A() 
    { 
     //x is being read from a file 
    } 
    void printX(); 
}; 

B.h

class B 
{ 
    void somefunction() 
    { 
     objectA.printX(); 
    } 
} 

main.cpp

main() 
{ 
    A objectA; 
    ... 
    B objB; 
    objB.somefunction(); 
} 
+0

多分 'B :: someFunction()'へのパラメータとして 'objectA'を渡しますか? –

+0

AにメンバーとしてBを追加したり、objBのコンストラクタにbass objectAを追加することができます。 – Unick

+0

'B'に' A'会員がいますか? 'A'への参照を保持しますか?それは私たちには知られていないあなたのユースケースに依存します。 – StoryTeller

答えて

2

あなただけに必要オブジェクトBを使用しようとしているオブジェクトへの参照。

注:オブジェクトを関数の引数として渡すときは、PODだけではありません。定数参照で渡すのがベストプラクティスです。それらを変更していません(あなたがオブジェクト全体のコピーを作っていない、そういう意味では、大きなものかもしれませんが、ポインタを渡すだけです)。しかし、この場合はconst参照になりますので、const関数を呼び出すことができます。これがprintX定数を作った理由です。おそらくprintXはAを変更していないので、constでなければなりません。

A.h

class A 
{ 
    int x; 
    A() 
    { 
     //x is being read from a file 
    } 
    void printX() const; 
}; 

B.h

class B 
{ 
    void somefunction(const A& objectA) 
    { 
     objectA.printX(); 
    } 
} 

main.cpp

main() 
{ 
    A objectA; 
    ... 
    B objB; 
    objB.somefunction(objectA); 
} 
関連する問題