| 話題 | 更新日時 | 概要 |
| 整数の割り算 | 2004/03/26 | 計算を行うときは、型に注意 |
| 変数の初期化 | 2004/03/27 | 変数の初期化 |
| C言語タイプの文字列 | 2004/03/27 | C言語タイプの文字列の扱い |
| 比較的新しい型 | 2004/04/08 | 比較的新しい型 |
| ヘッダファイル | 2004/04/23 | ヘッダファイルの2重読み込み防止 |
| クラスの雛形 | 2004/04/29 | クラスを作るときの定型 |
| クラス(自動的に生成されるメンバ関数) | 2004/04/29 | 自動的に生成されるメンバ関数 |
| explicit | 2004/04/23 | コンストラクタに付けると良い |
| コンストラクタ | 2004/05/06 | コンストラクタの不正な呼び出し |
ある程度、C++を知っている人を対象にした書籍です。C++言語に関する細かな疑問や、効率的にプログラムを書いていくための道しるべを示してくれます。プログラミング言語C++第3版より、読みやすく、お勧めです。
C++の関数や、STLなどのリファレンスです。ソケット関数やXML関連の関数なども紹介されていて、便利な書籍です。
C++のバイブル的な書籍です。これを理解できれば、これ以上、C++関連の書籍を読む必要はないでしょう。
// 以下は同じ
int counter(0);
int counter = 0;
// 配列
int c[3] = {10,11,13};
int c[3] = {1}; //この場合、1,0,0となる。
int c[] = {1,2};
// 文字列
char name[] = "name";
char name[50] = "ab"; // 記憶領域が、50確保されるところが違う。
#include <cstring>
char name[40];
int l;
char str1[] = "foo";
char str2[] = "peko";
std::strcpy(name,"sam"); // nameに"sam\0"がコピーされる。
std::strncpy(name,"sam",10); // 上記と同じだが、10を超える文字数はコピーしない。
std::strcat(name,"sam"); // nameに、"sam"を追加する。
std::strncat(name,"sam",10); // 上記と同じだが、追加する文字列で10を超える部分はコピーしない。
// strncpy strncat は、文字数が領域を超えると、文字列の最後に\0を追加できない可能性があることに注意。
// Cの文字列としては、不適当な文字列ができてしまうことがある。
l = std::strlen(name); // 文字列の長さ。\0は数えない。
std::strcmp(str1,str2); // str1がstr2と等しい場合は、0を返す。
// str1がstr2より小さい場合は、負を返す。
// str1がstr2より大きい場合は、正を返す。
// 長さを比較するのではなく、中身を比較することに注意。
wchar_t wide;
wide = L'Ω'; // Lを付けることで、ワイド文字であることを示す
・ブール型
bool flag;
flag = true;
zen
#ifndef __CALL_BACK_CLASS__ //__CALL_BACK_CLASS__が定義されていないなら
#define __CALL_BACK_CLASS__ //__CALL_BACK_CLASS__を定義する
//ここに、ヘッダの中身を記述する
#endif
Visual C++では、
class sample
{
private:
sample(const sample&){}
const sample& operator = (const sample&){}
public:
explicit sample(){}
virtual ~sample(){}
};
この記述では、sample(const sample& old_class)と、const sample& operator = (const sample& old_class)は利用できません。デフォルトの動作で使う場合は、この行をコメントとし、定義して使う場合は、publicで定義して使います。
class int_array{
explicit int_array(int size);
int_array test(1); // これは、正しいが、
int_array test = 1; // これは、無効になる。
予想外の使い方をしないように、explicitを付けると良いそうです。
class foo
{
int* a;
public:
foo():
a(NULL)
{
}
foo(int h)
{
foo();
}
}
メンバ変数aの初期化を両方のコンストラクタに記述するのが面倒に思えたので、デフォルトのコンストラクタを呼び出すように記述しました。これは、コンパイルはうまくいき、うまく動作しました。しかし、あるとき、突然、動かなくなりました。