ページ 11

[C++] privateのメンバ変数の値を取得したい

Posted: 2013年12月18日(水) 03:30
by Diabo
現在C++のクラスを勉強中でコンソールゲームを作っています。

弾クラスとプレイヤクラスを作成しました。
弾の発射時にプレイヤのx座標とy座標を取得したいのですがプレイヤクラスの
privateメンバ変数にあるので取得ができません。
他クラスのprivateメンバ変数の値を取得する方法はないのでしょうか?
また、他によい方法があれば教えてもらえるとうれしいです。

Re: [C++] privateのメンバ変数の値を取得したい

Posted: 2013年12月18日(水) 05:07
by へにっくす
単純に考えると、プレイヤクラスに、弾を返してもらうメソッドを作ればいい気がします。

Re: [C++] privateのメンバ変数の値を取得したい

Posted: 2013年12月18日(水) 09:24
by usao
プレイヤのx座標,y座標を取得するためのpublicなメソッド を用意する
のが 最も素直(?)な気がします.

コード:

class CPlayer
{
private:
  int m_X;  //X座標
  int m_Y;  //Y座標
public:
  int GetX() const {  return m_X;  }  //X座標を知る方法を提供
  int GetY() const {  return m_Y;  }  //Y〃
};

Re: [C++] privateのメンバ変数の値を取得したい

Posted: 2013年12月18日(水) 11:41
by softya(ソフト屋)
> 他クラスのprivateメンバ変数の値を取得する方法はないのでしょうか?

わざわざprivateしている訳ですので、座標を戻すメソッドを新設したほうが良いでしょう。
私としてはx,yは一塊なので戻り値を構造体で返すのをおすすめします。

Re: [C++] privateのメンバ変数の値を取得したい

Posted: 2013年12月18日(水) 17:13
by ISLe
プレイヤーの座標を元に、どこから弾が出るかを弾クラスが処理するのは、設計としてマズいのでは。

弾はプレイヤーに従属するものですから、へにっくすさんのおっしゃるように、プレイヤーが、弾(あるいは弾を発射する位置の基準となる座標)を返すメソッドを持つべきと思います。

Re: [C++] privateのメンバ変数の値を取得したい

Posted: 2013年12月18日(水) 18:31
by usao
オフトピック
単に
>他クラスのprivateメンバ変数の値を取得する方法はないのでしょうか?
というのが本題なんじゃないかな…とか.(件名もそんな感じだし)

Re: [C++] privateのメンバ変数の値を取得したい

Posted: 2013年12月18日(水) 19:17
by ISLe
>usaoさん
そういうことであれば

privateメンバ変数の参照かポインタを返すメンバ関数を用意し、その戻り値を保持して使えばいつでも外部からアクセスできます

という回答もOKということになりますかね。

C++のクラスを勉強中でコンソールゲームを作っている、という背景を考慮した回答をしたつもりですが。

Re: [C++] privateのメンバ変数の値を取得したい

Posted: 2013年12月19日(木) 05:32
by Diabo
やはり座標を取得するメソッドを作るのが良いのでしょうか。
ISLe さんが書きました:プレイヤーの座標を元に、どこから弾が出るかを弾クラスが処理するのは、設計としてマズいのでは。

弾はプレイヤーに従属するものですから、へにっくすさんのおっしゃるように、プレイヤーが、弾(あるいは弾を発射する位置の基準となる座標)を返すメソッドを持つべきと思います。
確かにその通りです。ゲーム設計についても勉強していくことにしました。
みなさんありがとうございました。