方法は2つ。
一つは今回の条件に一致しませんが一応、「getter/setterを使う」ですね。
C++
1class ClassB {
2public:
3 ClassB(int n) {/*処理*/ }
4 // setterとして
5 void SetNumber( int n ){
6 this->n = n;
7 }
8};
9
10class ClassA {
11public:
12 ClassB member_B;
13 ClassA(int n) {
14 member_B.SetNumber( n );
15 }
16};
もう一つは、「ポインタを介してnew/deleteで動的生成」ですかね。
C++
1class ClassB {
2public:
3 ClassB(int n) {/*処理*/ }
4};
5
6class ClassA {
7public:
8 ClassB* member_B; // ← ポインタとして保持
9 ClassA(int n) {
10 member_B = new ClassB( n ); // ← 動的に生成
11 }
12 ~ClassA(){
13 delete member_B; // ← 動的に生成されているから動的に破棄
14 }
15};
みたいにしてnew/deleteを使って動的に生成する。ClassAのデストラクタが動く前までにmember_Bが破棄されている可能性も処理によってはあり得るのでif文とかで「member_Bが破棄されていなければ破棄する」とかみたいにする場合も。
ただモダンなC++の場合は生のポインタを使わずにスマートポインタ( std::unique_ptr, std::shared_ptr等 ) を使うらしいですが。
余談ですが、ClassB(int n) {/*処理*/ };
の末尾にあるセミコロンは要りませんよ。
[追記1]
dameoさんのアドバイスもありますね。(最近C++使ってなかったので失念していました。)
メンバ初期化子リストを使えばnew/deleteを使わなくともコピーコンストラクタが働くのでClassA(int n) : member_B(ClassB(n)){}
のようにもできると思います。