basic_istream::read

basic_istream::readは、指定された文字数ちょうどの文字列を入力ストリームから読み取る。

basic_ios - cpprefjp C++日本語リファレンス

入力文字列が指定された文字数に達しない場合、文字列決定のリターンキーを入れても、読み込み待ち状態のままになり、文字数に達するまで待ち続ける。
また、文字数に達しない状態でEOFが来ると、入力失敗扱いになる。(今回はやらないが、これについてはいずれ扱う。)

sを"ABCDEFGHIJ"にしておいて、5文字ちょうどをここに読み込ませる。

$ vi basic_istream.cpp
$ g++ basic_istream.cpp -o basic_istream
$ ./basic_istream
s: VWXYZ
s = VWXYZFGHIJ
$ ./basic_istream
s: PQR
x
s = PQR
xFGHIJ
$

"VWXYZ"のように5文字ちょうどでリターンキーを入れると、sに"VWXYZ"が格納される。
ただし、readはNULL終端しないので注意。sは"VWXYZFGHIJ"となる。
"PQR"のように、5文字に達しない場合、リターンキーを入れても改行するだけ。
改行と次の行の"x"を含めて5文字になったので、入力が終了した。

Sample/cpp/basic_istream/read/src/read at master · bg1bgst333/Sample · GitHub

basic_istream::get

cinの正体であるbasic_istream<char>。
メンバ関数getで入力文字を取得できる。

basic_istream::get - cpprefjp C++日本語リファレンス

実は、文字列も取得できるが、今回は1文字のみ。

int(正確にはint_type)で返ってくるので、

$ vi basic_istream.cpp
$ g++ basic_istream.cpp -o basic_istream
$ ./basic_istream
c: 1
c = 49
$ ./basic_istream
c: 2
c = 50
$ ./basic_istream
c: A
c = 65
$ ./basic_istream
c: a
c = 97
$

このように整数値で返ってくる。

Sample/cpp/basic_istream/get/src/basic_istream at master · bg1bgst333/Sample · GitHub

ferror

ferrorは、指定されたファイルポインタ(ストリーム)でエラーが発生しているかどうかを判定する。

Man page of FERROR
C言語関数辞典 - ferror

読み取り専用でファイルを開いた時に、書き込みをしようとしたらどうなるか。

feofのトピックで"test.txt"を読み取り専用で開いたが、ループの1回目(3バイト読み込めた時とはそういうこと。)でfwriteで"XYZ"を書き込もうとしてみる。
一応、perrorも出してるが、そのあとで、ferrorが真なら、ループを抜けるようになっている。
当然抜けるわけだが。

$ ls
ferror  ferror.c  test.txt
$ cat test.txt
ABCDE
FGHIJ
KLMNO$ vi ferror.c
$ gcc ferror.c -o ferror
$ ./ferror
buf = [ABC], read_len = 3
fread: Success
written_len = 0
fwrite: Bad file descriptor
ferror true!
$

Bad file descriptorで、ferrorが真となり、ループを抜けてる。

Sample/c/ferror/ferror/src/ferror at master · bg1bgst333/Sample · GitHub

Boolean

Booleanは真偽オブジェクト。

真偽値(Boolean)
Boolean - JavaScript | MDN

コンストラクタにtrueを渡せば、trueを持つ真偽オブジェクト、falseなら、falseを持つ真偽オブジェクトになる。

trueを渡して生成したblをalertで表示。

trueと表示
trueと表示

trueと表示される。

Sample/js/Boolean/Boolean/src/Boolean at master · bg1bgst333/Sample · GitHub

ArrayList

ArrayListは、必要に応じてサイズが拡大する動的配列クラス。

ArrayList Class (System.Collections) | Microsoft Docs

まあ、ジェネリクスが導入された2.0からは、List<T>が一般的であり、ArrayListは非推奨。

Objectにいったんキャストしてから、目的の形にする。

s == obj == Element1
s == obj == Element2
s == obj == Element3
s == obj == Element4
s == obj == Element5
続行するには何かキーを押してください . . .

こうなる。

Sample/dotnet/ArrayList/ArrayList/src/ArrayList_ at master · bg1bgst333/Sample · GitHub

CDocManager::AddDocTemplate

CDocManager::AddDocTemplateは、ドキュメントテンプレートを追加するメンバ関数

MFC Document/View documentation and enhancements - CodeProject

CDocManager
CDocManager

CDocManagerから開始。ここでステップイン。

CWinApp::AddDocTemplate
CWinApp::AddDocTemplate

ここにくる。

ここまで進める
ここまで進める

ここからである。ここでステップイン。

CDocManager::AddDocTemplate
CDocManager::AddDocTemplate

このままだと狭いので広げてみる。

どっちにいくか
どっちにいくか

ここからどちらに進むのか。

下に行った
下に行った

下に行った。
ASSERTは、まあ、おいといて、pTemplate->LoadTemplateを過ぎた時の状態を見てみる。

pTemplateの中
pTemplateの中

pTemplateの中をみてる。
下にスクロールして、

自動変数
自動変数

pTemplateの中に、CDocManagerDocとかCMainFrameとかCDocManagerViewとか、テンプレートの情報がロードされてるっぽい・・・。

テンプレートリストへの追加
テンプレートリストへの追加

さらにその先で、m_templateListに追加してるのがわかる。m_nCountが1になっている。
今回はここまで。

Sample/mfc/CDocManager/AddDocTemplate/src/CDocManager at master · bg1bgst333/Sample · GitHub

Ellipse

Ellipseは、楕円を描画する。

Ellipse function (wingdi.h) | Microsoft Docs

矩形の、左端、上端、右端、下端、を指定することで、その矩形に内接する楕円を描画する。
Ellipse.cppのWM_PAINTで、

Ellipseに矩形情報を渡すだけ。

楕円
楕円

このように楕円というかこの場合はほぼ円が描画される。

Sample/winapi/Ellipse/Ellipse/src/Ellipse at master · bg1bgst333/Sample · GitHub