今更オブジェクト指向について勉強していました。
ずーーーっと、よそのオブジェクトが持つ変数の書き換えに、
そのオブジェクトの参照を丸ごと渡すという暴挙を行っていたのです
継承と多態性まで理解していたんですが、他のクラスへのアクセス方法を理解していなかったので悩みました。
しかしここのサイトでインターフェイスクラスを学んでいてオブジェクト指向のピースが脳内でガチガチとハマりはじめました。
凄いかもオブジェクト指向。すごいぞオブ脳。
之も知らずに会社のシステムとかSRPGとか作ってたノカァ・・・。
順番まるっきり違うなぁ。と思う今日この頃。
備忘録でメモメモ。
// インターフェイス3.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//
#include "stdafx.h"
typedef struct{
int x,y;
}pos;
class map;
class charcter;
//例:マップに属する変数を書き換える
class IMapBelongWrite{
public:
virtual void MapWrite(pos temp) = 0;
};
//マップ変数を書き換えるインターフェイスを継承したmapクラスを作る
class map : public IMapBelongWrite{
private:
pos nBelong;//書き換えるターゲット
public:
void MapWrite(pos temp) override{
nBelong.x = temp.x;
nBelong.y = temp.y;
}
void show(){
printf("x = %d , y = %d\n",nBelong.x,nBelong.y);
}
};
class charcter{
//インターフェイスクラスへの参照を持つ
IMapBelongWrite *lpMapInter;
public:
void setchar(){
pos temp;
temp.x = 100;
temp.y = 200;
lpMapInter->MapWrite(temp);
}
//コンストラクタ
charcter();
charcter(map *lpmap){lpMapInter = lpmap;}
};
//ステージクラス
class Stage{
private:
map *lpMap;
charcter *lpChar;
public:
//コンストラクタでインスタンス作る
Stage(){
lpMap = new map();
lpChar = new charcter(lpMap);
}
~stage(){
delete lpMap;
delete lpChar;
}
void updata(){
//mapインスタンスの変数書き換え
lpChar->setchar();
//確認
lpMap->show();
}
};
int _tmain(int argc, _TCHAR* argv[])
{
Stage *lpStage = new Stage();
lpStage->updata();
delete lpStage;
return 0;
}