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

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

新規登録して質問してみよう
ただいま回答率
85.42%
C++

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

意見交換

クローズ

4回答

1044閲覧

メンバ関数の呼び出し方について

WILLoWISP

総合スコア0

C++

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

0グッド

0クリップ

投稿2023/05/23 01:35

0

0

現在、C++の勉強を始めたのですが、
プログラムで2つの関数を呼び出して処理を行いたい場合、以下の2つで出力結果以外に違いはあるのでしょうか?

C++

1class MyClass 2{ 3public : 4 void fnA() { 5 cout << "A" << endl; 6 } 7 void fnB() { 8 cout << "B" << endl; 9 } 10}; 11int main() 12{ 13 MyClass myClass; 14 myClass.fnA(); 15 myClass.fnB(); 16}

C++

1class MyClass 2{ 3public : 4 void fnA() { 5 cout << "A" << endl; 6 fnB(); 7 } 8 void fnB() { 9 cout << "B" << endl; 10 } 11}; 12int main() 13{ 14 MyClass myClass; 15 myClass.fnA(); 16}

たぶん、見やすさとか処理速度の問題だけだと思いますけど、
どちらにすべきか、みたいなものはあるのでしょうか?

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

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

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

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

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

回答4

#1

fana

総合スコア11753

投稿2023/05/23 01:47

編集2023/05/23 01:55

以下の2つで出力結果以外に違いはあるのでしょうか?

少なくとも「出力結果」に関してはご自身で動かしてみればわかる話なので,訊くことではないと思いますが……
(そもそも,そのコードを書いた時点で「明らかに同じ」を想定しているんですよね?)

どちらにすべきか

に関して言えば,「処理速度がどうの~」以前に,まず,何を書いているのか次第です.
すなわち【MyClass::fnA() メソッドの 役割/処理内容 っていうのは何なのですか?(何をして,何をしないのか)】
という話が本来的にはあるハズで,それに則した側が「正しい」と言えるでしょう.
そういう意味では,今回の例では fnA が行うことが2つのコードで異なっているので,仮に一方が「正しい」ならば他方は間違いだと言えます.
(後者側の fnA は,もはや fnAB ですよね.内容的に.)

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

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

#2

Zuishin

総合スコア28662

投稿2023/05/23 03:01

どちらにすべきか、みたいなものはあるのでしょうか?

処理内容によって話が異なってくるので、そもそも処理内容が決まっていないのでは話になりません。

強いて言うなら、コンソール出力する内容をハードコーディングするためだけの関数という時点で、どちらもだめです。

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

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

#3

episteme

総合スコア16614

投稿2023/05/23 03:44

編集2023/05/23 04:10

どちらにすべきか、みたいなものはあるのでしょうか?

「AそしてBを行う」という責務をMyClassに与えたいのなら
void fnAthenB() { fnA(); fnB(); }
をMyclassに追加します。

「AそしてBを行う」シチュエーションがそんなに無いのなら、
「Aを行う(fnA)」と「Bを行う(fnB)」だけを定義し、利用者には両者を(順に)呼んでもらえばいい。

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

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

#4

emerald

総合スコア42

投稿2023/05/23 23:47

前者、後者ともに要件(動きが両者とも同じで、両者とも正しい場合)を満たせている事を前提に言うのであれば下記の結論に至ると思われます。

結論:
単一責任の原則を元に記述した場合、適切な記述方法は前者の記述例になると思われます。

下記は設計の話になるので興味がない場合は読み飛ばしてください。

仮にメソッドAにメソッドBを呼び出すことで要件を満たすなら、メソッドBはメソッドAからしか読み込めない様にしないといけないと思われます。

仮にメソッドBが共通部品であり、その他要件からも呼び出される事がある場合、独立したモジュールとして設計する必要があると思います。

上記の事を踏まえて考えると、前者のソースコードは各メソッド役割がしっかりと分割されていて保守性の高いソースコードになると思われます。

後者のソースコードは若干歪なプログラムと言う評価になると思われます。

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

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

最新の回答から1ヶ月経過したため この意見交換はクローズされました

意見をやりとりしたい話題がある場合は質問してみましょう!

質問する

関連した質問