C++
ファイル読み込み
ifstreamによるファイルの読み込み
ifstream inputFile( "data.txt", ifstream::binary );
inputFile.seekg( 0, ifstream::end );
int fileSize = (int)( inputFile.tellg() );
inputFile.seekg( 0, ifstream::beg );
char* fileImage = new char[ fileSize ];
inputFile.read( fileImage, fileSize );
constメンバ関数
constをつけて宣言されたメンバ関数はメンバ変数を変更することが出来ない。
constなメンバ関数からconstでないメンバ関数を呼ぶことは出来ない。
class classA{
public
void funcA() const;
int mInt;
}
funcA()の中でmIntの値を変更することが出来ない。
クラスの宣言と定義
- クラスAがクラスBの実体を持つ場合、クラスBの定義が必要になる
- AのヘッダでBのヘッダをインクルードする必要がある
- クラスAがクラスBのポインタを持つ場合、クラスBの宣言だけで良い
- 関数の引数や戻り値に使う場合も宣言だけで良い
実体の場合
//ClassA.h
#include "ClassB.h" //インクルード必要
class ClassA{
ClassB b; //実体
};
ポインタ・引数・戻り値の場合
//ClassA.h
class ClassB; //宣言だけで良い
class ClassA{
ClassB* b;
ClassB getB();
void setB(ClassB b)
};
インクルードを減らすことでコンパイル時間の短縮に繋がる
可変長引数
仮引数に...を書いて宣言し、va_listを使う
例:引数をそのままprintfに渡す自作関数
void myprintf(const char *format, ...){
va_list ap;
va_start(ap, format);
vprintf(format, ap);
va_end(ap);
}
printfならvprintf、sprintfならvsprintのように、va_listを渡す関数が用意されている
va_listを自前で操作する場合はもう少しめんどい
可変長引数マクロ
C99からの追加機能
#define SOME_MACRO(x, ...) some_func(x, __VA_ARGS__)
ただし可変長部分の引数がないとカンマが残ってしまいコンパイルエラーになる
gccの独自拡張機能、##__VA_ARGS__を使うと可変長引数が無い場合カンマを除去してくれる
#define SOME_MACRO(x,...) some_func(x, ##__VA_ARGS__)
最終更新:2011年01月27日 19:16