p372〜p384まで
どうやらこれからiostream周りの解説になるらしい。あんまりC++の標準ライブラリは使ったことないのでこれからはサンプルコードをできるだけうって身につけていくようにする。
サンプル実行環境
まず、それにともなって、今回の勉強のはじめの時点で書いていたテンプレートのやつをちょっと進化させてみた。
// main.h //------------------------------------------------------------ // enum //------------------------------------------------------------ // こいつをcinで指定してやる // いまんところchapter8より先のにしか使ってないので注意 enum ExecSampleType { EXEC_TYPE_STRING3, EXEC_TYPE_MAX }; //------------------------------------------------------------ // Class Definition //------------------------------------------------------------ class BaseClass { public: virtual ~BaseClass(){} virtual void update(){} }; // BaseClass class StatePtn { private: BaseClass* sampleCode[EXEC_TYPE_MAX]; public: StatePtn(); ~StatePtn(); void execState(ExecSampleType execType); }; // StatePtn
// main.cpp #include <iostream> #include "main.h" #include "String3.cpp" StatePtn::StatePtn() { sampleCode[EXEC_TYPE_STRING3] = new String3; } StatePtn::~StatePtn() { for( int i = 0; i < EXEC_TYPE_MAX; ++i ) { delete sampleCode[i]; } } void StatePtn::execState(ExecSampleType execType) { sampleCode[execType]->update(); } int main() { StatePtn state; while(!0) { int execType; cout << "実行したいサンプルタイプNoを入力してください。(0〜" << EXEC_TYPE_MAX << "まで) >> " << flush; cin >> execType; if( execType >= EXEC_TYPE_MAX ) { cout << "そのサンプルはありません" << endl; break; } state.execState(static_cast<ExecSampleType>(execType)); } return 0; }
ってな具合のちょっとしたStateパターン使ってみた。んで、あとはBaseClassのupdate内にサンプルコードのmain関数の処理を記述していくと。
まぁこげな感じではじめてみましょー。
stringクラス
stringクラスの基本的な使い方から。まず#include
const char*を引数にとる関数に文字列を渡したい場合は、以下のようにc_str()を呼ぶ。
void Hoge(const char* str); string str = "hoge"; Hoge(str.c_str()); // c_strによって生の文字列アドレスを返す。
c_strのほかにdataというメンバ関数も文字列へのconst char配列を返すが、dataはヌルターミネータがついていることを保障しない。これとの関連で、stringクラスは文字列の中にヌル文字を含むことができる。
うーん、いちいちここに機能全部書いていってもしかたないから、重要な部分だけメモることにしよう。
stringstreamクラス
coutみたいな感じで使って、stringstreamオブジェクトに文字列を保存することができる。cin的な使い方も可能。
次からは結構長い間ファイルー。ちなみに今回のstringクラス覚えたことで、上のテンプレートで、コメントと名前表示させた後に実行コード選ばせるみたいな変更を加えてみた。これでいろんなテストコードが一覧でくる!
しかし、土日は結局昼間ゲームしちゃってたりしてていかんですね。もっと勉強せねば。