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 。んで、string hoge = "hoge";やらstring hoge("hoge");で初期化可能。簡単に扱えるようにhoge += "hogehoge";なんてのもOK。size()とかのメソッドも持っている。確かstringクラスは非標準のSTLかなんかだった気がする。持ってても不思議じゃない。lengthってのもあるみたい。あと、指定文字へは配列の形でアクセス可能。hoge[3]みたいな。
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クラス覚えたことで、上のテンプレートで、コメントと名前表示させた後に実行コード選ばせるみたいな変更を加えてみた。これでいろんなテストコードが一覧でくる!
しかし、土日は結局昼間ゲームしちゃってたりしてていかんですね。もっと勉強せねば。