2015年08月

1. ちゃっちゃと終わらせないとね

終わるまで寝ない!
のは無理だろうから、とにかく寝る前に出来るところまではやる!ってことにしよう。
っていうかそんなん当たり前なんだけど、どうしてもやる前に寝ちゃうんだよねえ。


よし決めた。今後C++の勉強は必ず寝る前にやる。最後まで。
寝てしまったらその日はもう終わり。カテゴリもそう変更しよう。

(毎日更新、寝る前に最後まで)

ちょっとクドいかな?
っていうか "最後まで" ってどこまでだよ?って感じかなあ?具体的じゃないよね。
最低1章は終わらすとか?それだと例プログラムの攻略が厳しすぎるしなあ。


よし、基本は1日1章。
例プログラム攻略の時は2日か長くとも3日にしよう。

というわけで、カテゴリもそう変更しよう。

(毎日更新)(基本1日1章、例プログラム攻略時最高3日まで)(終わるまで睡眠禁止)

これで具体的になったね。


さあ決めた以上今日で純粋仮想関数の例プログラムの攻略は終わらせないとね。
っていうかすでに4日目だけどw
いや停滞期含めたら今日で6日目?やばくね?どんだけ時間かけてんだよ。

うっしゃ今回で終わらす!
終わるまで寝ない!!


とりあえず休憩。休憩は大事。



24:20
2. www

カテゴリの文字数が多すぎて登録出来ねえww
〜(終わ までしか登録出来ないみたい。
うーん、どうしよう。

(毎日更新)はいらないか。1日1章なんだから必然的に毎日更新になるもんね。
後は「基本」もいらないよね。「まで」もいらない。それと「終わる」は「終了」にしよう。

(1日1章、例プログラム攻略時最高3日)(終了まで睡眠禁止)

これならどうよ?ライブドアブログさんよお。


試してみたらあと2文字いけるみたいだから、「1日1章」の後に 「更新」をつけよう。これで文字数いっぱい。


よし休憩再開!



26:44
3. っしゃやっぞ

引数つきのコンストラクタでTest.txtファイルを書き込みモードで開いて、main関数に戻ってきたとこまでやったね。

次は if(txt.IsValid() == false)。txtオブジェクトでIsValid関数の呼び出し。
IsValid関数はtxtオブジェクトのクラスであるCTextFileクラスでオーバーライドされてないから、継承元のCFileのIsValid関数が呼び出される。
プログラム3の最後にあるね。内容は return (m_pfile != NULL);。

、、ああ間違えた!
今までの全部なし!前回の最後まで巻き戻し。
継承元のCFileクラスのコンストラクタの後に継承先のCTextFileクラスのコンストラクタを呼び出すの忘れてたわ。

ああいやいや違う違う、CFileクラスのコンストラクタでOpen関数を呼んで、Open関数がModifyFlags関数を呼んでるやんけ。ここをちゃんと説明せなあかんやろが。
ModifyFlags関数を呼んでるけど、それを呼び出した大元のクラスはCTextFileクラスであって、ModifyFlags関数にはvirtualがついてるから仮想関数となり、CTextFileクラスのModifyFlags関数が呼ばれるってわけだったね。
んでもってCTextFileクラスのModifyFlags関数はプログラム5にあってcout関数でCTextFile::ModifyFlagsと出力されるはず。ビルド結果も同じでオッケー!

ああああああ違う違う違う!
おかしいやんか!CFileクラスのコンストラクタの後にCTextFileクラスのコンストラクタも呼び出されるはずなんやで、そこでもOpen関数呼び出してそっからModifyFlags関数を呼び出してたら CTextFile::ModifyFlags っていう出力を再度やることになって同じ表示が二つ続くはずなのにビルド結果はそうなってない!ってことはModifyFlags関数は一回しか呼び出されないってことやん。
いやいやその前に CFile::Open っていう表示が一回しかされてないんやでOpen関数自体一回しか呼び出されないはず!
でもCFileクラスのコンストラクタの後にCTextFileクラスのコンストラクタでもOpen関数を呼び出してるやん。二回呼び出してるやん。
なんやしこれ。どっかが違う。どっか間違えてる。
おえええええええうぜえええええ


休憩!



28:36
4. おどりゃクソ森

死なす!


継承先のオブジェクトが引数つきのコンストラクタを呼び出した場合、継承元のコンストラクタとして呼び出されるのは引数つきのコンストラクタでなくて引数のないデフォルトコンストラクタなんだよ。
僕はそれを知らぬ間に例プログラムでそれを実験してたんだわ。ここの真ん中あたりで実際にビルド表示がそうなってる。
ーーーーーーーーーーーーーーー
ーーーーーーーーーー
// Inherit1.cpp
#include <iostream>
using namespace std;

class CA
{
public:
    CA()     { cout << "CA" << endl; }
    CA(int a){ cout << "CA:" << a << endl; }
    ~CA()    { cout << "~CA" << endl; }
};

class CB : public CA
{
public:
    CB(int a){ cout << "CB:" << a << endl; }
};

int main()
{
    CB b(2);

    return 0;
}
ーーーーーーーーーー「ロベールのC++教室」から引用して改変

ビルド結果
ーーーーーーーーーー
CA
CB:2
~CA
ーーーーーーーーーー
ーーーーーーーーーーーーーーー
CB b(2);で引数つきコンストラクタを呼び出してるのに、ビルド結果を見ると最初に「CA」って表示されてるってことは引数なしの CA() { cout << "CA" << endl; } を呼び出してるってことじゃんね?

つまりだ、main関数の CTextFile   txt("Test.txt", "w"); で呼び出すのはまず継承元CFileクラスのデフォルトコンストラクタなんだよ。プログラム3にあるね。
ーーーーーーーーーー
CFile::CFile()
{
    m_pfile = NULL;
    m_bCopy = false;
}
ーーーーーーーーーー「ロベールのC++教室」から引用

こいつはOpen関数を呼び出してないじゃん。メンバ変数を初期化しただけ。
その後で継承先CTextFileクラスの引数つきのコンストラクタが呼び出されるわけなんだよ。
それならCTextFileクラスの引数つきコンストラクタでOpen関数を呼ぶのがOpen関数の1回目なんだからビルド表示と違いが出ない。
よしよしそういうことなんだよ。たぶん。

ただし注意!
CTextFileクラスの引数つきコンストラクタの実装なんだけどさ、実装を省略するために
ーーーーーーーーーー
CTextFile::CTextFile(const char* pszPath,const char* pszFlags) : CFile(pszPath, pszFlags)
{
}
ーーーーーーーーーー「ロベールのC++教室」から引用

こうやっちゃダメみたい。このやり方はここで説明したよね。
こうしちゃうと "CFileクラスの" 引数つきコンストラクタが呼ばれるんだったじゃん。
そうなるとCFileクラスの引数つきコンストラクタからOpen関数を呼び出すことになるよね?んでOpen関数がModifyFlags関数を呼び出すと。
もちろんここでもModifyFlags関数は仮想関数だから、きちんと呼び出した大元のクラスであるCTextFileクラスのModifyFlags関数が呼び出されるのは間違いないんだけどさ、それじゃあダメらしい。正しく働かないらしい。どんな感じでダメになるのかはよく分からないんだけど、とにかくそれじゃあダメなんだってさ。

んでそれはなんでかっていうと、その原因が「仮想関数の初期化」にあるんだよ。ここでやったやつね。説明してるけどハッキリ言って分かってなかった。
「仮想関数の初期化」は、"コンストラクタ内" で行われるんだってさ。
ってことはつまり、ModifyFlags関数の場合は "それを呼び出したOpen関数を呼び出したコンストラクタであるCFileクラスの引数つきコンストラクタ内" で行われるってことになるんだよ。
ややこしいけどとにかく、仮想関数であるModifyFlags関数は、CFileクラスのコンストラクタ内で初期化されてる。

、、ああやっぱなんか違う。おかしい。
「継承先クラスで引数つきのコンストラクタを呼び出したら継承元クラスのデフォルトコンストラクタが呼び出される」ってそんなんおかしくね?
いや僕の実験プログラムのビルド結果から考えると確かにそういう結論になるんやけど、「ロベールのC++教室」ではそんな感じの説明されてない。
普通に継承元クラスの引数つきコンストラクタが呼び出されてる感じや。
わからん。

疑問点をハッキリさせとこう。
継承先クラスが引数つきコンストラクタを呼び出した場合、継承元コンストラクタとしてまず呼び出されるのは
・引数なしのデフォルトコンストラクタ
・引数つきのコンストラクタ
この二つのどっちなのか?
ここをハッキリさせたい。じゃないといろんなとこの疑問点がモヤモヤしたままになる。


休憩してから調査しよう。
頼むぞグーグル先生!!



30:39
5. あっかんわわからん

わかりません。グーグル先生もお手上げ。


「ロベールのC++教室」では間違いなくまず継承元の引数つきコンストラクタが呼び出されてる。
でもそうなったらOpen関数は継承元と継承先で二回呼び出されるはずなのに、そうはなってない。一回しか呼び出されてない。

さあどうする?
どうする?わからん。どうする?

よし自分の実験プログラムの結果を信じよう。
継承元の引数なしのデフォルトコンストラクタがまず呼び出される!ということにする!決めた!それっきゃない!!
そうすればOpen関数も一回しか呼び出されないからビルド結果とも矛盾しない!
完璧やないか!自分を信じるんや!信じるものはなんちゃららや!!


よしそうなれば話は早い。
main関数のCTextFile   txt("Test.txt", "w");で引数つきのコンストラクタを呼び出して、まずは継承元CFileクラスのデフォルトコンストラクタが呼び出される。そこでメンバの初期化だけしてOpen関数は呼び出さない。
次に継承先CTextFileクラスの引数つきコンストラクタが呼び出される。んでもってそこでOpen関数が呼び出されるわけなんだけど、ただし注意!というわけだね。やっと上の説明に戻れるわけだ。

ーーーーーーーーーーーーーーー
ただし注意!
CTextFileクラスの引数つきコンストラクタの実装なんだけどさ、実装を省略するために
ーーーーーーーーーー
CTextFile::CTextFile(const char* pszPath,const char* pszFlags) : CFile(pszPath, pszFlags)
{
}
ーーーーーーーーーー「ロベールのC++教室」から引用

こうやっちゃダメみたい。このやり方はここで説明したよね。
こうしちゃうと "CFileクラスの" 引数つきコンストラクタが呼ばれるんだったじゃん。
そうなるとCFileクラスの引数つきコンストラクタからOpen関数を呼び出すことになるよね?んでOpen関数がModifyFlags関数を呼び出すと。
もちろんここでもModifyFlags関数は仮想関数だから、きちんと呼び出した大元のクラスであるCTextFileクラスのModifyFlags関数が呼び出されるのは間違いないんだけどさ、それじゃあダメらしい。正しく働かないらしい。どんな感じでダメになるのかはよく分からないんだけど、とにかくそれじゃあダメなんだってさ。

んでそれはなんでかっていうと、その原因が「仮想関数の初期化」にあるんだよ。ここでやったやつね。説明してるけどハッキリ言って分かってなかった。
「仮想関数の初期化」は、"コンストラクタ内" で行われるんだってさ。
ってことはつまり、ModifyFlags関数の場合は "それを呼び出したOpen関数を呼び出したコンストラクタであるCFileクラスの引数つきコンストラクタ内" で行われるってことになるんだよ。
ややこしいけどとにかく、仮想関数であるModifyFlags関数は、CFileクラスのコンストラクタ内で初期化されてる。
ーーーーーーーーーーーーーーー

この説明の続きをしなくちゃね。
、、いやこの説明もおかしくなるな。
「継承元のCFileクラスではデフォルトコンストラクタが呼び出される」ってことはCFileクラスではOpen関数は呼び出してないんだから、ModifyFlags関数が初期化されることだってないはずじゃんね?
なら別に
ーーーーーーーーーー
CTextFile::CTextFile(const char* pszPath,const char* pszFlags) : CFile(pszPath, pszFlags)
{
}
ーーーーーーーーーー「ロベールのC++教室」から引用
こうしたってかまわない??
ってことはないよな。ないのか?ないない。こうしちゃったら呼び出されるのは結局CFileクラスの引数つきコンストラクタだから仮想関数の初期化もCFileクラスで行われちゃう。そしたら元の木阿弥じゃんね?

そうだよ。だから上の説明はおかしくない。
CFileクラスで仮想関数のModifyFlags関数を初期化しちゃうとさ、Open関数によって呼び出されるModifyFlags関数もCFileクラスのModifyFlags関数になっちゃうわけなんだけど、それじゃあ困るじゃんね?
だってModifyFlags関数を仮想関数にしたことでCTextFileのModifyFlags関数を呼び出そうとしてんのに、そのModifyFlags関数はCFileクラスで初期化されてるなんてさ、もうワケワカメだよ。
まあ僕がワケワカメだろうとコンパイラは関係ないんだろうけど、とにかくそんな感じできちんとビルド出来ないみたい。

だからコンストラクタで仮想関数を初期化する時は、それを呼び出す大元のクラスで初期化しなくちゃならないワケよ。
だからこの例プログラムにおいてはCTextFileクラスの引数つきコンストラクタを
ーーーーーーーーーー
CTextFile::CTextFile(const char* pszPath,
                     const char* pszFlags)
{
    Open(pszPath, pszFlags);
}
ーーーーーーーーーー「ロベールのC++教室」から引用
こういう形にして、CFileクラスでなくCTextFileクラスからOpen関数を呼び出すことでModifyFlags関数をCTextFileクラスで初期化するようにしたってわけなんだね。


ああああ疲れまくったよ。
はてこれで何か解決したんだろうか?何を説明したんだろうか?長々と。
もうわけがわからん。ってかまだどんだけ序盤だよ。「終わるまで寝ない(キリッ)」とか笑うわ。ムリムリムリのカタツムリでしょ。すでに死ぬほど眠たいっつーの。ムリムリ。あとどんだけあるのよ?ってかどこまでいったの?まだmain関数の一行目とかじゃね?ウケるんですけど。ウケんし。


とりあえず休憩。



31:15
6. やったろかいな

8:30までやる。そして肉のハナマサに行く。肉とビール買う。たらふく食う。寝る。決めた。

カテゴリの宣言違反にはならないことにする。
今日からこの例プログラムの攻略を始めたこととする。
だから今日を合わせて3日以内にクリアすればいいということになるわけでありますですはい。
まったく理に適ってる。筋が通ってる。


よし始めよう。

まずCFileクラスのデフォルトコンストラクタが呼び出されてメンバの初期化をして、その次にCTextFileクラスの引数つきコンストラクタが呼び出されてOpen関数を呼び出す。
そこまでにもう問題はないものとする。疑問を感じないことにする。

この後の流れは今回の序盤と前回を引用する。
ーーーーーーーーーー
Open関数は前回の例プログラムと変化なしだね。
cout関数で「CFile::Open」が出力。ビルド結果も同じ。オッケー!
ーーーーーーーーーー前回から引用

ーーーーーーーーーー
CTextFileクラスのModifyFlags関数はプログラム5にあってcout関数でCTextFile::ModifyFlagsと出力されるはず。ビルド結果も同じでオッケー!
ーーーーーーーーーー今回の序盤から引用

ModifyFlags関数ではファイルを強制的にテキストモードで開く。
そしてOpen関数にtrueを返す。

Open関数にて、
ーーーーーーーーーー
fopen関数でTest.txtファイルをwモード=書き込みモードで開いてreturn (m_pfile != NULL);。
Open関数は終了してコンストラクタも終了、main関数に戻ると。
ーーーーーーーーーー前回から引用

ーーーーーーーーーー
次は if(txt.IsValid() == false)。txtオブジェクトでIsValid関数の呼び出し。
IsValid関数はtxtオブジェクトのクラスであるCTextFileクラスでオーバーライドされてないから、継承元のCFileのIsValid関数が呼び出される。
プログラム3の最後にあるね。内容は return (m_pfile != NULL);。
ーーーーーーーーーー今回の序盤から引用

m_pfileには開いたファイルのアドレスが入っててNULLではないんだから、txt.IsValid() == false は偽。実行文の return 0; は実行されずに次の行へ。

次は txt.WriteString("He sang, ¥"まったり まったり まったりな~♪¥"");


まったりまったりまったり休憩〜♪



32:58
7. 戦じゃあ

いざいざいざ!


WriteString関数はプログラム4の最後にひっそり佇んでるね。
ーーーーーーーーーー
inline int CTextFile::WriteString(const char* pszString)
{
    return Write(pszString, strlen(pszString));
}
ーーーーーーーーーー「ロベールのC++教室」から引用

Write関数の呼び出し。プログラム3におわします。
ーーーーーーーーーー
size_t CFile::Write(const void* pData, size_t nSize)
{
    if(IsValid() == false)
        return 0;
    return fwrite(pData, 1, nSize, m_pfile);
}
ーーーーーーーーーー「ロベールのC++教室」から引用

これもアップキャストの例プログラムでやったことあるね。
ーーーーーーーーーー
処理は継承の時と同じだね。
return fwrite(pData, 1, nSize, m_pfile); に引数を渡すと return fwrite(buffer, 1, strlen(buffer), m_pfile); 。bufferには ペペロンチーノ っていう文字列が入力されてたよね。
んで、m_pfile には fopen(pszFile, bufFlags) っていうアドレスが代入されてて、それは fopen("Test.txt","w") のことだね。
wはbがついてないからテキストモードってこと。
つまり m_pfile ってのは「"テキスト" の "書き込みモード" で開いた "Test.txt" っていう名前のファイルのアドレス」ってことだね。
そのアドレスのファイルに、ペペロンチーノ っていう文字列を書き込んだわけだ。

これでプログラム3のWrite関数は終了してプログラム4のWriteString関数に戻ってそれも終了して、プログラム6のWrite関数に戻ってそれも終了してmain関数に戻ると。
ーーーーーーーーーーアップキャスト4から引用

9/2訂正
↑の説明の「buffer」って変数は今回は「pszString」だったね。

これの「ペペロンチーノ」って部分を「He sang, ¥"まったり まったり まったりな~♪¥"」に変えればいいだけ。
ってか「まったり」ってなんなん?どーでもいいけどさあ。


ではmain関数に戻って、次は txt.Close();。
継承の例プログラムでやったよね。特に何もしない関数だったね。

次、CBinaryFile bin("Test.txt", "r");。

新たなオブジェクト、CBinaryFile。
こいつも引数つきコンストラクタを呼び出すんだけど、まずはCTextFileクラスと一緒でCFileのデフォルトコンストラクタを呼び出す。ホントにそれでいいのかはまだ半信半疑だけど、そういうことにして説明を進めます。
そしてCFileのデフォルトコンストラクタでメンバを初期化してからCBinaryFileクラスの引数つきコンストラクタを呼び出し。そこでOpen関数を呼び出し。
Open関数の最初でcout関数によって「CFile::Open」を出力。ビルド結果も同じ。オッケー!
んでその後にModifyFlags関数を呼び出すんだけど、この時呼び出されるModifyFlags関数は仮想関数としてCBinaryFileクラスのコンストラクタで初期化されてるんだから、CBinaryFileクラスのModifyFlags関数が呼び出されると。
んでそのModifyFlags関数の最初でcout関数によって「CBinaryFile::ModifyFlags 」が出力。ビルド結果も同じ。オッケー!
残りはアップキャストでやったCFile関数のModifyFlags関数の内容と全く同じ。ってかCFile関数のModifyFlags関数を消去してそれをそっくりそのままCBinaryFileに移しただけ。
「Test.txtファイルを強制的にバイナリモードで開く」ってことをやるわけだね。
そしてOpen関数にtrueを返すのも同じ。
その後のOpen関数の流れも同じ。少し上で全く同じことやったよね。

ーーーーーーーーーーーーーーー
Open関数にて、
ーーーーーーーーーー
fopen関数でTest.txtファイルをwモード=書き込みモードで開いてreturn (m_pfile != NULL);。
Open関数は終了してコンストラクタも終了、main関数に戻ると。
ーーーーーーーーーー前回から引用

ーーーーーーーーーー
次は if(txt.IsValid() == false)。txtオブジェクトでIsValid関数の呼び出し。
IsValid関数はtxtオブジェクトのクラスであるCTextFileクラスでオーバーライドされてないから、継承元のCFileのIsValid関数が呼び出される。
プログラム3の最後にあるね。内容は return (m_pfile != NULL);。
ーーーーーーーーーー今回の序盤から引用

m_pfileには開いたファイルのアドレスが入っててNULLではないんだから、txt.IsValid() == false は偽。実行文の return 0; は実行されずに次の行へ。
ーーーーーーーーーーーーーーー少し上から引用

9/2訂正
↑はCTextFileクラスにおいて wモード= "テキスト" の "書き込みモード" でファイルを開いたっていう説明なんだけど、CBinaryFileクラスにおいては rbモード= "バイナリ" の "読み込みモード" でファイルを開いたんだね。処理はほぼ同じなんだけど結果が違うから注意ね。


さあいよいよmain関数の中盤戦。この例プログラムはこっからが本番。だってパッと見イミフだもん。
ーーーーーーーーーー
const int READLENGTH = 16;
    char bufHex[READLENGTH * 3 + 1];
    char bufASCII[READLENGTH + 1];
    int nRead;
ーーーーーーーーーー「ロベールのC++教室」から引用

なんだよREADLENGTHて。なにもんだよ。



さあさあ、今日はここまでにしよう。もうヘトヘト。
READLENGTHちゃんは明日たっぷり可愛がってあげよう。

ではでは、肉のハナマサへ、レッツゴー!!



さあ今日は月末だから今月のまとめをしよう。



最高血圧(mmHg) 123
最低血圧(mmHg) 71
脈拍(回/分) 66

<今月の推移>

うーん、変化ない、よね?
体重に合わせてほんのわずかに上下してる?気のせいかな?
もう少しダイエット後のデータがないと何とも言えないね。



体重(kg) 74.6

体脂肪率(%) 22.0

BMI 23.5


<今月の推移>

上が体重、下が体脂肪率。 


途中ガクッと体脂肪率が減った日があるけど、銭湯で風呂入った後だからだよ。幻だね。


筋トレ始めたのが24日だから、そこから順調に体重は減ってるね。

体脂肪率は微妙な感じだけど、まあ減少傾向ではあるよね。




体温(℃) 36.1



お通じ なし



食べたもの

深夜 なし

朝 なし

昼 なし

夜 まだ (追記 高野豆腐、ゆで玉子、青汁プロテイン)


そういえば今日はまだ何も食べてないよ。

今から豆腐買いに行くのは面倒だし、玉子だけでいいか。

筋トレ後に青汁プロテインは飲むよ。


27:02 追記

夜メシは高野豆腐とゆで玉子にしたよ。青汁プロテインも飲んだよ。

高野豆腐なんだけど、どう調理しても美味しくないって思ってたんだけどさ、"熱湯" で戻したらプルップルになってすげえ美味くなったよ。ネットで見つけたやり方なんだけどさ。まじプルップル。高野豆腐のあのギシギシした食感が嘘のように滑らかになる。これはもしかしたら普通の豆腐の代わりになるかも。

高野豆腐は108円で5枚入りだから、1枚22円。普通の豆腐が最安値で38円だから、もし代えるなら38-22で16円節約できる。

、、あんま変わらんな。

なら普通の豆腐でいいか。豆腐を買いに行くのが面倒な時だけ高野豆腐で代用ってことで。




歩き

歩数(歩) 192

距離(km) 0.1

時間(分) 3


<今月の合計>

歩き(歩) 29747 (960/日) (先月1273/日)

走り(歩) 1422 (先月0)

自転車(km) 22.4 (先月15.2)


酷いね。1日1000歩も歩いてない。

歩数計アプリが不正確っていうのもあるけど、それにしてもあまりに酷い。これは真面目にウォーキング考えないとね。

っていうか豆腐買いに毎日100円ローソンまで歩くって決めたはずなのに全く守れてないw

いかんねえ。




さて、視力と聴力も月一で測るんだったよね。

先月末は測り忘れちゃったよ。



<視力>

右目 1.0

左目 1.0


余裕の1.0!

疲れ目知らずの矢田五郎とは僕のことだよ。



<聴力>

右耳

左耳



見方は前回やったね。

ーーーーーーーーーー

低音から高音まで6種類の音を聞いてさ、聞こえなくなった音量の数値をプロットしたグラフなんだけど、上の青いゾーンが正常、下に行くほど聴力が低いってこと。

ーーーーーーーーーー

聴力も異常なし!




さてさて今回から尿検査もしていこう。

かなり前に尿検査試験紙を買ったのに使ってなかったんだよね。

これも月一で十分だよね。



見方はまあそのままなんだけど、真ん中の細長い紙が試験紙で、その先っぽに尿をつけると試験薬の色が変わって、その色が濃かったら "腎臓がヤバい" ってこと。

上が尿たん白で下が尿糖。どっちも色は薄いね。ナイス腎臓!




さてさて後は筋トレの成果である "握力" と "身体のサイズ" なんだけど、どっちもまるで変化がないからグラフにまとめる必要ないやね。

あ、ウエストだけはグラフにしとこうか。




初めて測ったのが7/13で、そこから筋トレを月末までやって一気に落ちたのに筋トレやめたらまた元に戻って、んでまた筋トレ再開したらすぐ落ちた、って感じだね。

実に分かりやすいグラフw


他の項目も今後変化が現れるようならグラフにしていこう。




さあ筋トレはこれからするよ。23時頃からやるよ。

今日は腕立ての日だね。

終わり次第追記するよ。



23:38

筋トレ完了!


1セット目

腹筋(回) 25

膝つき腕立て(回) 25

逆手懸垂(回) 4


2セット目

腹筋(回) 25

膝つき腕立て(回) 25

逆手懸垂(回) 2


3セット目

腹筋(回) 25

膝つかず腕立て(回) 10

逆手懸垂(回) 1


懸垂の最高回数がまた増えたよ。いいねいいねえ。

懸垂が出来るようになると「広背筋」っていう筋肉が鍛えられるんだってさ。背中の筋肉だね。

たぶん背中ってなかなか鍛えにくい箇所だと思うから、懸垂が出来るようになるのは自宅筋トレにとってかなり有益なはずだよ。たぶんね。




〜 封印 〜


「はい!、、」

混乱しながらもミカミはすぐに返事をした。そしてすぐさま頭を切り替えた。混乱した頭を無理矢理に整理した。

( ジェクト様がそうおっしゃるということは、この周囲に "ホルモンがいる" ということ。)

ミカミは周囲を見渡した。
ジェクト、クソの沼、ガラクタ山、そしてツカ。

( この巻きグソのような男がホルモンであるとしか考えようがない!)

「かしこまりました!すぐに!」

そう言ってミカミは素早く立ち上がり、ツカに向けて右手をかざした。

「ゲフェ、、」

言いかけたミカミに凄まじい勢いで大剣が飛んできた。ミカミは瞬時に飛び退いた。

「わや坊!人に手のひらを向けるっちゅうんは、ここでは鉄砲を向けるのと同じじゃ!」

ツカが憤慨して言い、ミカミを睨みつけた。
そのツカの顔面にジェクトの拳がめり込んだ。ツカが吹っ飛んだ。轟音と共に壁にめり込んだ。

「調子に乗ってんなし。うぜえって。」

ジェクトは軽く手を払うと、ミカミに向き直った。

「おいミカミ、ちゃっちゃと頼むわ。」

言われたミカミは気を取り直し、「はい!ただいま!」と返事してツカに右手を向け直した。しかし向けた手の平の親指から上半分がすっぽりと失われていた。
ミカミがそれに気づいた途端、その切断面から血が溢れ出た。

( さっきの牽制!?)

ミカミは痛みに表情を歪ませ、すぐに左手で切断面を抑え込んで膝をついた。


声にならない呻きを上げるミカミであったが、しかしジェクトへの恐怖心がそれに打ち勝った。ミカミは歯を食いしばり、今度は左手をツカに向けてかざした。
そのツカは壁から下りてすでに態勢を整えていた。

「2度目はないきに。」

ぼそり言ったツカがミカミに向かってかっ飛んだ。
その首根っこをジェクトが掴み上げた。そしてツカを羽交い締めにした。

「っしゃミカミ頼むわ。」

そのジェクトの言葉に「はい!」と勢いよく返事したミカミは意識をツカに集中して唱えた。

「ゲフェイン!!」

途端、ツカを淡い光が包み込んだ。そしてそれは瞬く間にツカの体表面へと吸着していった。




16:02
Amazonにて
ーーーーーーーーーー
煎り大豆 1kg 1400
煮干し 1kg 1600
ーーーーーーーーーー
クレカ-3000

Amazonで安いの見つけたから1kgずつ買ったよ。
煎り大豆は普通にスーパーで買っても150円/100gだからそんなに変わらないんだけど、煮干はスーパーだと250円/100gくらいだからかなり安く買えたね。

1日に20gじゃ物足りないことがわかったから30gずつ食べることにしよう。
ーーーーーーーーーー
煎り大豆
1400円/1000g×30g=42円/日

煮干し
1600円/1000g×30g=48円/日
ーーーーーーーーーー
合計90円/日

前回までは81円/日だっから9円ほど1日の食費が上がっちゃったけど、まあそれくらいは誤差の範囲だよね。



22:15
〆ちまうぜ。

口座 140577
財布 8898
クレカ -177638



1. まず休憩から入る勉強

新しい形の勉強方法の提案だね。

とにかくまず「勉強する」と宣言だけしておいて、すぐに休憩する。それから勉強を始めることで集中力が120%まで高まることがNASAの研究で明らかになったらしいよ。ウソね。


というわけで休憩しよう。



36:09
2. せめて、人らしく

少しでもやっとかなきゃね。


さあmain関数。
まずは CTextFile   txt("Test.txt", "w");。引数つきコンストラクタの呼び出し。
CTextFileは継承先クラスだから、コンストラクタの呼び出され方は 継承元クラスのコンストラクタ→継承先クラスのコンストラクタの順番だったよね。ここでやったね。

継承元クラスCFileの引数つきコンストラクタの実装はプログラム3で追加されてたよね。
ーーーーーーーーーー
CFile::CFile(const char* pszPath, const char* pszFlags)
{
    m_pfile = NULL;
    m_bCopy = false;
    Open(pszPath, pszFlags);
}
ーーーーーーーーーー「ロベールのC++教室」から引用

特に説明が必要なコードはないね。Open関数の呼び出し。
Open関数は前回の例プログラムと変化なしだね。
cout関数で「CFile::Open」が出力。ビルド結果も同じ。オッケー!
fopen関数でTest.txtファイルをwモード=書き込みモードで開いてreturn (m_pfile != NULL);。
Open関数は終了してコンストラクタも終了、main関数に戻ると。


今回はこんなもんで。
グッバイ!



↑このページのトップヘ