課題1−5(中級編1週目)で作成したプロジェクトp3kadai2w1をベースとして、表1の機能を持つ文字列クラス(MyString)を作成しテストしなさい。
機能 | 例 | 備考 | 必須機能かどうか |
オブジェクトの生成が可能であること | MyString str1, str2; before: str1=存在しない, str2=存在しない after: str1="", str2="" |
デフォルトコンストラクタを作成せよ 実装済 | 必須 |
char配列文字列をもとにしたオブジェクトの生成が可能であること | MyString str1("Foo"); before: str1=存在しない after: str1="Foo" |
引数をもつコンストラクタを作成せよ 実装済 | 必須 |
オブジェクトのコピーが可能であること | MyString str1 (str2); before: str1=null, str2="Foo" after: str1="Foo", str2="Foo" |
コピーコンストラクタを作成せよ 実装済 | 必須 |
標準出力に文字列を出力できること (デバッグ用観測メソッド) |
str1.printString(); before: str1="hoge" after: str1="hoge", コンソール出力="hoge" |
printStringメソッドを作成せよ 実装済 | 必須 |
char配列文字列へ読み取り専用ポインタを取得可能であること (デバッグ用観測メソッド) |
const char* ca = str.getConstCharArray(); before: str="hoge" after: str1="hoge", ca="hoge" |
getConstCharArrayメソッドを作成せよ 実装済 | 必須 |
任意の文字への参照を返す機能を持つこと | str1.getChar(2) = 'G'; before: str1="hoge" after: str1="hoGe" |
getCharメソッドを作成せよ 実装済 | 必須 |
機能 | 例 | 備考 | 必須機能かどうか |
==演算子による文字列の一致判定が可能であること | bool result = str1 == str2; before: str1="123", str2="456" after: result=false str1="123", str2="456" |
メンバ演算子関数で作成せよ 引数はconst参照とすること | 必須 |
=演算子によりMyStringクラス文字列オブジェクトの代入が可能であること | str1 = str2; before: str1="hoge", str2="Foo" after: str1="Foo", str2="Foo" |
メンバ演算子関数で作成せよ 引数はconst参照とすること | 必須 |
+演算子によりMyStringクラス文字列オブジェクト同士の連結が可能であること | str1 = str2 + str3; before: str1="hoge", str2="Foo", str3="Bar" after: str1="FooBar", str2="Foo", str3="Bar" |
フレンド演算子関数で作成せよ 引数はconst参照とすること | 必須 |
機能 | 例 | 備考 | 必須機能かどうか |
<演算子による文字列の辞書順比較が可能であること | bool result = str1 < str2; before: str1="123", str2="456" after: result=true str1="123", str2="456" |
メンバ演算子関数で作成せよ 引数はconst参照とすること | オプション |
>演算子による文字列の辞書順比較が可能であること | bool result = str1 > str2; before: str1="123", str2="456" after: result=false str1="123", str2="456" |
メンバ演算子関数で作成せよ 引数はconst参照とすること | オプション |
<< ストリーム出力演算子による標準出力への出力が可能であること | cout << str1; before: str1="hoge" after: str1="hoge", コンソール出力="hoge" |
フレンド演算子関数で作成せよ 引数はconst参照とすること | オプション |
>> ストリーム入力演算子による標準入力からの入力が可能であること | cin >> str1; before: コンソール入力="hoge", str1="" after: str1="hoge" |
フレンド演算子関数で作成せよ 引数は参照とすること | オプション |
実装のヒント
"abc" == "ABC" ?レポートに掲載する結果とは
なお、メモリリークが発生せずに動作していることを以下のメイン関数を用いて確認すること。
メイン関数 (main.cpp)
includeSrcWithFrame("page4/main.cpp", 4, "", false, true); ?>
また、入力された文字列をメンバ変数にセットする関数は以下のようにかけるので、参考にすると良い。
includeSrcWithFrame("page4/setstring.cpp", 4, "",false, true); ?>
テスト環境のソースコードを以下に示す。
includeSrcWithFrame("page4/TestMyString.h", 4, "",false, true); ?>
includeSrcWithFrame("page4/TestMyString.cpp", 4, "",false, true); ?>
クラスの設計とは
機能仕様を作成することにより、開発対象を明確化できる。
また、クラスを利用する人が必要な情報を整理することが出来る(マニュアルが完成)。
クラスの実装とは
実装仕様を作成することにより、実装の際の注意点を事前に洗い出し、実装後になってからの手戻りを減らすことが出来る。
今回は必要が無いと思われるが、メソッド内部の動作が複雑な場合は、フローチャートなどの図を用いて検討した結果を示すこともある。
クラスのテストとは
検証とは、実装と仕様が一致していることを確認することである。
検証仕様(テスト項目)を作成することにより、実装するプログラムが備えるべき機能が明確になる。
テストを実施することにより、プログラムが期待通りに実装できている事を確認できる。