質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

947閲覧

クラスをまたいだメンバ変数の取得方法について

torimingo

総合スコア122

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2018/12/03 23:41

クラスをまたいでメンバ変数を取得する方法について質問です。
Clientクラス、Managerクラス、Employeeクラス、Paperクラスが以下の関係にあり、Clientクラスが、Paperクラスのメンバ変数numを取得したい場合、どのような方法が最適でしょうか?

// クライアント
class Client {
private:
Manager manager;
};
// マネージャー
class Manager {
private:
Employee employee;
};
// 社員
class Employee {
private:
Paper paper;
};
// 資料
class Paper {
private:
int num;
};

いまのところ、マネージャーと社員と資料に、GetPaperNum()メソッドを追加して、段階的にクライアントまで届けるようにしています。
しかし、この方法を採用し続けると、不用意にGetterばかりが増え、またがれるクラス(マネージャーと社員)の責務も曖昧になっていきそうです。
クライアントが直接資料クラスを持つようにして、資料クラスのGetPaperNum()メソッドを呼ぶ方法も考えられますが、クラス間の関係が複雑になっていきそうな気がします。
なにかよい方法は、ありませんでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

おそらく情報が少なすぎてケースバイケースのどのケースに当てはまるか判らないので回答しようがないのかなという気がします。

このクラスの関係性を維持したまま、何も考えずにやるのであれば、順番にメンバをGetしていく方法を採るのかなと思います。
(毎回書くのが面倒くさいという悩みは出ますが。)

cpp

1// クライアント 2class Client { 3private: 4 Manager manager; 5public: 6 void Hoge() { 7 int paperNum = manager.GetEmployee().GetPaper().GetNum(); ←ここ 8 } 9}; 10// マネージャー 11class Manager { 12private: 13 Employee employee; 14public: 15 Employee& GetEmployee() { return employee; } 16}; 17// 社員 18class Employee { 19private: 20 Paper paper; 21public: 22 Paper& GetPaper() { return paper; } 23}; 24// 資料 25class Paper { 26private: 27 int num; 28public: 29 int GetNum() { return num; } 30};

クライアントが直接資料クラスを持つようにして資料クラスのGetPaperNum()メソッドを呼ぶ方法も考えられます

「なんで今のクラス関係になっているの?」が判らないので、その方法が選択肢に入るかどうかの判断材料がありません。

投稿2018/12/04 01:37

takabosoft

総合スコア8356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

torimingo

2018/12/04 14:12

ご回答をありがとうございました。 状況によって、最適な方法が異なるんですね。 (ちなみにクラスの関係は「マネージャーは社員を管理する立場で、社員は(仕事で使う)資料を持っています。クライアントは偉いひとで、マネージャーとしかやりとりしないんですが、社員が持っている資料を見たがったりもする」といった感じです)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問