特定のクラスのインスタンスが他のクラスのインスタンスの中身を知りたいことはあります。
例えば敵クラスがプレイヤークラスの座標を参照したいようなケースはあります。
そんな時は取得するインターフェイスクラスを定義してそれを実装し、
取得したいインスタンスにインターフェイスのポインタを渡して参照させるようにします。
例えばこのように実装します。
コード:
#include<iostream>
class IGetter {
public:
virtual ~IGetter() = default;
virtual int getX() const = 0;
};
class Player : public IGetter {
public:
Player() : _x(100) {}
virtual ~Player() = default;
int getX() const override {
return _x;
}
private:
int _x;
};
class Enemy {
public:
Enemy(const IGetter* impl) : _impl(impl) {}
virtual ~Enemy() = default;
void show() const {
std::cout << _impl->getX() << std::endl;
}
private:
const IGetter* _impl;
};
int main() {
Player *player = new Player();
Enemy *enemy = new Enemy(dynamic_cast<const IGetter*>(player));
enemy->show();
delete enemy;
delete player;
}