コード:
class B { };
class A {
B b;
B *p; // どこかで p = new B; を実行する。
};
情報不足で申し訳ございません。この形です。
ここでは、Aクラス、BクラスはTaskクラスを継承しており、それぞれの中身は以下のようになっているとします。
コード:
#pragma once
class Task {
public:
virtual void update() = 0;
};
class B:public Task{
void update() override;
};
void B::update(){
//Aクラスのオブジェクトaもどこかで生成されそこからa.update()が呼ばれたとします。
//ここでa.xを用いたい
}
class A:public Task{
public:
void update() override;
private:
B b;
int x;
};
void A::update(){
b.update();
}
クラスBはクラスAの変数xをupdate()の中で用いたいのですが、xを引数として渡すとなると、update()はupdate(int)の形になってしまい、Taskクラスの
virtual void update() = 0;
をoverrideできず新しいものを作らなければならなくなるので、あまりきれいではないように感じてしまうのです。