10.2関係の構成
2764 ワード
構成関係とは?
:クラスを作成するときに、他のオブジェクトで次のコンポーネントを使用することもできます.
クラスを削除して、プライベートスペースに配置します.
例えば、ゲームにはゴブリンやスライムなどの怪物がいて、
座標を表すx,yの値をそれぞれPositionというクラスに配置する.
モンスターのクラスでは、プライベートメンバーに置いて部品の形で使用します.
継承類にすればいいのでしょうか?そう思います.class Parent
{
protected :
int x;
int y;
virtual void Walk() = 0;
}
->そうなんだけど!!以下に整理した内容を参考に、関系のないモンスタータイプが现れたら、モンスターの中でメンバー変数を単独で整理する必要があります.
クラスを個別に作成するのは効率的で、構成関係と呼ばれます.
パーツを想像して納得!
https://velog.io/@kwt0124/%EC%88%9C%EC%88%98-%EA%B0%80%EC%83%81%ED%95%A8%EC%88%98
例
:ゴブリンの座標x,y,スライムも位置を表す座標があるはずです.共通の部分なので、部品として扱い、クラスとして作成し、メンバー変数として使用すると効率的です.
class Parent
{
protected :
int x;
int y;
virtual void Walk() = 0;
}
:ゴブリンの座標x,y,スライムも位置を表す座標があるはずです.共通の部分なので、部品として扱い、クラスとして作成し、メンバー変数として使用すると効率的です.
:メンバー変数として使用するPositionクラスが作成されました.
#include <iostream>
#include <vector>
#include <string>
using namespace std;
class Position
{
private :
int mX;
int mY;
public :
Position(const int&inX, const int&inY)
: mX{ inX }, mY{inY}
{}
void SetPosition(const Position& InPos)
{
mX = InPos.mX;
mY = InPos.mY;
}
friend std::ostream & operator << (std::ostream & out, const Position & pos2d)
{
out << pos2d.mX << " " << pos2d.mY;
return out;
}
};
class Goblin
{
private :
string mName;
Position mLocation;
public :
Goblin(const string &inName, const Position&inPos)
:mLocation{ inPos }, mName{inName}
{}
void MoveTo(const Position &nextPos)
{
mLocation.SetPosition(nextPos);
}
friend std::ostream &operator << (std::ostream &out, const Goblin &gob)
{
out << gob.mName << " " << gob.mLocation;
return out;
}
};
int main()
{
Goblin gob("고블린", Position(4,0));
cout << gob << endl;
{
gob.MoveTo(Position(1, 1));
cout << gob << endl;
}
}
Reference
この問題について(10.2関係の構成), 我々は、より多くの情報をここで見つけました https://velog.io/@kwt0124/10.2-구성관계テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol