###オブジェクト指向におけるオーバーロード実装方法についてお教えください。
趣味でプログラミングをしている程度の知識です。
オブジェクト指向におけるオーバーロード実装方法についてお教えください。
(サンプルソースが c++のみであること、ご了承ください)
###質問詳細
例えば、1つの数値を引数として渡した場合は それに 10 を加算した値を返し、2つの引数を渡した場合はその合計を返す関数を考えた場合、以下の2つの方法があると思います。
(sampleA, sampleBとします)
どちらを使っても結果は同じだと思いますが、業務でプログラミングをされる方は通常、どちらの方法を採用されるのでしょうか。
##myclass.h
c++
1#ifndef MYCLASS_H 2#define MYCLASS_H 3 4class MyClass 5{ 6public: 7 MyClass(); 8 9 //sample A 10 int addA(int value); 11 int addA(int value, int addValue); 12// int addA(int value, int addValue = int(10)); << これは無いものとお考えください 13 14 //sample B 15 int addB(int value); 16 int addB(int value, int addValue); 17 18private: 19 int computationPart(int value, int addValue); 20}; 21 22#endif // MYCLASS_H 23
オーバーロードの設計の考え方に対する質問ですので、上記ヘッダファイル内の
c++
1int addA(int value, int addValue = int(10));
は無いものとしてお考えください。
##myclass.cpp
c++
1#include "myclass.h" 2 3#define ADD_VALUE int(10) 4 5MyClass::MyClass(){} 6 7// sample A 8int MyClass::addA(int value) 9{ 10 return addA(value, ADD_VALUE); 11} 12 13int MyClass::addA(int value, int addValue) 14{ 15 return value + addValue; 16} 17 18//sample B 19int MyClass::addB(int value) 20{ 21 return computationPart(value, ADD_VALUE); 22} 23 24int MyClass::addB(int value, int addValue) 25{ 26 return computationPart(value, addValue); 27} 28 29int MyClass::computationPart(int value, int addValue) 30{ 31 return value + addValue; 32} 33
sampleAでは内部で自分のオーバーロード関数
int addA(int value, int addValue);
を呼び出しています。
sampleBではオーバーロードから呼び出される専用の関数
int computationPart(int value, int addValue);
を定義しています。
##イメージ
私のイメージを画像にしてみました。
#sampleA
#sampleB
私個人のイメージとしては、sampleB のほうが流れが綺麗だと思いますが、
・コーディング量が増える
・int addB(int value) 関数が実質何もしていない
の2点があまりよろしくないように感じます。
###知りたいこと
あくまでも趣味レベルのプログラミングですので動きさえすれば何でもいいのかもしれませんが、実際には以下のどれにあたるのでしょうか。
- 実際、どちらでも問題がないので設計する人の趣味レベル
- なにか理由があり、どちらの方法を使うか決まっている。
- 違いは無いが、慣習としてどちらか一方の形が使われている
- それ以外
以上、よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー