読者です 読者をやめる 読者になる 読者になる

C++の勉強その3

引き続き、ロベール先生のC++教室。第二部。
http://www7b.biglobe.ne.jp/~robe/cpphtml/index.html

第1章 とにかく作ってみよう
  • オブジェクトの生成が newを使わなくてもできる。普通に作るとスタック、newするとヒープってことか。他にクラス関数の(静的なメンバ?)呼び出しもあるみたいなのでちょっとややこしい
  • 初期化引数の渡し方が構造体っぽく渡すのと、一般的な方法が2種類あってややこしい
第7章 ファイルを分けよう
  • 「クラスの宣言と実装を2ファイルに分ける」という謎ルールが出現して困惑したので調べる。

【C++】なぜヘッダと実装はわけるべきなのでしょうか(.hに実装を書くことは邪道か)
https://teratail.com/questions/10742
第15回関数の宣言~ライブラリとヘッダファイル
https://www.grapecity.com/tools/support/powernews/column/clang/015/page03.htm

  • これは「C言語はあらかじめ宣言をしないと関数が使えない」という仕様に起因しているみたい。んで、一般的にライブラリなんかはバイナリで提供して、それを使いたい開発者は自分のコードにそのライブラリヘッダファイルを突っ込んで関数を宣言しておいて、関数自体はバイナリを叩いて呼び出す、ということなのかな。
第9章 コピー
  • 引数は大概ポインタや参照で渡されるだろうから永続的なオブジェクトで永続的に値を使いたい場合は値のコピーをしなきゃならない。んでコピーコンストラクタなるものがある
  • 引数として自分(インスタンス)があるので、それを自由に使ってコピーせい。ということらしい。コピー自体はしてくれへんのかい!
class myClass
{
public:
    myClass();                      // コンストラクタ
    myClass(myClass& obj);  // コピーコンストラクタ
    ~myClass()                    // デストラクタ
}

 こんな特殊関数の定義って…。

第12章 第3のアクセス指定子
  • 親のprivateメソッドは継承先である子で使えない。代わりにprotectedしろとのこと。継承されそうなクラスは全部protectedで宣言していくべきかな?
第13章 関数のすげ替え〜
  • むずい。一般的なオーバーラードは仮想関数virtual宣言がいる。子のオブジェクトからvirtual宣言の無いメンバ関数を親の別のメンバ関数から呼んだ場合、オーバーライド前のメンバ関数が呼ばれる? この辺自分でコード書かないと理解できないかも
  • このあたり出来ることの種類を出来るだけ担保する思想のせいで、他言語にくらべてぐちゃぐちゃしているので、注意が必要。親クラスのメンバ関数を使う予定がなく、オーバーライドされるものは全部virtualとしておけばよいのか
  • コンストラクタ、デストラクタはオーバーライドされずに基底から順に実行されるらしい

C++ でデストラクタを virtual にしなくてはならない条件と理由
http://www.yunabe.jp/docs/cpp_virtual_destructor.html

  • デストラクタを仮想関数virtualにしてしまえばオーバーライドできる? 同じくコンストラクタも? なんでも出来るけどバグがいっぱい出そうな言語だなあ。難しい。
  • コンストラクタ内でvirtualを呼び出すと親のがどうしても呼びだされてしまう?
  • 関数プロトタイプに=0で抽象メソッド(ひどいsyntax)
第28章 静かなるメンバ〜
  • 静的メンバ変数→読み取り専用のメンバ変数かと思ったら、クラス変数みたいなものらしい。処理低減とかでなければ使うべきではないかな…。モンスターの寿命タイマーを一気に変更したりとか?
  • 静的メンバ関数はクラス関数みたいなインスタンス化してない時に使うもの
第31章 冶金工場
  • 型の違う変数を扱える関数を作るためのものと思えばいいのかな。型が厳密なC++ならでは。

Wikipedia: Standard Template Library
https://ja.wikipedia.org/wiki/Standard_Template_Library

  • テンプレートを使ったライブラリの集大成みたいなもんらしい。
  • あんまり数学的な事はしない場合は、普通の関数に型キャストして渡すか、クラスならコンストラクタで型変換すればいいんじゃないかと思う


 続いて第三部。難しい部分なので流し読みで大丈夫なはず。

第1章 シノニムの定義
  • オリジナル型の定義みたいなもん?
第4章 参照先は何もなし?
  • voidポインタ。型を気にせずポインタを受け取れる、汎用ポインタらしい。戻り値の型が動的な時に使えばいいのかな?
第41章 私はαでありωである
  • void main は使うな。

 そして第四部の未完ライブラリ紹介にざっと目を通してロベール先生卒業。