勉強
Effective C++ 第1章3項 あるクラスのメンバ関数でconstと非constの両方を用意した場合、それぞれに同じ処理のコードを書くという面倒なことになってしまう。それを避けるためには非constの関数ではconstな関数をconstを取り除いて呼ぶようにすればよい。実…
effectvie C++ 第1章3項 本に書かれていたメンバ関数のconstの意味。「ビットレベルでの不変性」(「物理的な不変性」)と「論理的な不変性」の二つ。 「ビットレベルでの不変性」とはC++のconstの定義。constなメンバ関数はそのオブジェクトが持つデータを変…
Effectvie C++ 第1章3項 自分で定義したある型に掛け算の演算子を定義したとする。 class Test {...}; const Test operator*(const Test& lhs, const Test& rhs); この掛け算の演算子の関数にもconstを付けておけば、次のようなタイプミスを防ぐことができる…
Effectvie C++ 第1章3項STLのiteratorでのconstの場合。iteratorの宣言にconstを付けるとiterator自体がconstとなり、参照先のデータはconstとはならず変更できる。 std::vector<int> v; const std::vector<int>::iterator p = v.begin(); *p = 123; // これはOK p++; </int></int>…
Effectvie C++ 第1章3項 constについての項目。あいかわらずconstは苦手。バグを防ぐためにも値を変更しないばあいにはcosntを付ける癖をつけたい。 ポインタにconstを付けるときは位置によってポインタ自身がconstなのか参照している先のデータがconstなの…
Effective C++第1章2項 #defineよりもconstを使ったほうがよいというのは知っていたが、#defineよりもconstのほうがメモリを食ってしまうのではないかと思っていたがそれは間違い。constのほうがメモリも少なくてもすむ場合が多い。 #defineである定数を定義…
Effective C++を読みながら勉強。今日は第1章の1項のみ。 C++はC、オブジェクト指向C++、テンプレートC++、STLといったサブセットからなる言語と考えるべし。
C++のテンプレートについての勉強を開始。 私はこのテンプレートが非常に苦手。使えば非常に便利なことは分かっているんだけど、どうもソースが読みにくくなってしまう。あとエラーが出たときにどこが原因なのか分かりにくいというもの苦手。 今回、きちんと…
本を読みながら仮想関数でポリモーフィズムについての勉強。 一応、知っている知識なので読みながら理解することはできたが、もしそうでなかったら、ポリモーフィズムの効果についてはよく理解できなかっただろう。 実際に自分がポリモーフィズムの便利さが…
C++の仮想関数についての勉強を再開。 間があいたのでどこまでやったか忘れていて、思い出すのにちょっと時間がかかってしまった。
仮想関数関連を勉強中。一応それっぽいコードは書いたことあったので自分の知識が正しいかどうか確認する感じになっている。いまのところ自分が理解していたことと大きく異なっているようなところはない。
C++のポリモーフィズムについて勉強中。これはC++というかオブジェクト指向のもっとも重要な点であるかしっかり学んでおきたい。
C++で継承したときのコンストラクタの仮引数について勉強中。
継承したとき、コンストラクタとデストラクタが実行される順番について勉強。 いくつも継承していると順番を間違えてしまいそうだ。 多重継承したときは記述した順番で実行される。 class base1; class base2; class test : public base1, public base2 { };…
複数のクラスを継承する多重継承について勉強中。 class base1; class base2; class Test : public base1, public base2 { }; ちゃんと設計しないまま、いくつも継承していったら、あるメンバがどこから継承されたものか分からなくなってしまいそうだ。便利…
"ゲームプログラマになる前に覚えておきたい技術"を引き続き読んでいる。 その中でC++で理解しておくべきこととして、いくつかの点が挙げられており、その中でメンバ関数宣言の後ろにつくconstというのがあった。 私はconstについての知識があやしく、ちゃん…
「ゲームプログラマになる前に覚えておきたい技術」を読んでいると、まだ値を入れていないポインタや解放したあとのポインタには0を入れておく習慣を身につけるべきだとある。 この考え方にはまったく異論はないし、自分もそうやっている。ただ0ではなくNULL…
「ゲームプログラマになる前に覚えておきたい技術」での倉庫番を作れという課題ができたので、その解説部分を読んだ。 コードの書き方はもちろん異なっているわけだか、メインとなるロジック部分の考え方はほとんど変わらなかった。 他人のソースを読むとき…
「ゲームプログラマになる前に覚えておきたい技術」にコンソールで倉庫番(本の中では荷物君となっていたが)を作れという課題があったのでやってみた。 時間を計りながらやってみたら、ぴったり1時間でできた。実際の画面はこんな感じ。Pがプレイヤーでnが荷…
演算子のオーバーロードをそのクラスのメンバ関数とせずにフレンド関数として定義することもできる。 #include <iostream> using namespace std; class Test { private: int value; public: Test() { value = 0; } Test(int n) { value = n; } friend Test operator+(T</iostream>…
本を読みながらC++の勉強。10ページ。今回は演算子のオーバーロードについて。 演算子のオーバーロードは次のような形式で定義する。 型 クラス名::operator#(引数) { } #の部分にオーバーロードしたい演算子が入る。たとえば+や=など。 実際に3次元ベクトル…
引き続き、本を読みながらC++の勉強。8ページ。 オブジェクトがコピーされるときの動作を指定する関数。たとえばTestクラスのコピーコンストラクタの定義は次の通り。 Test(Test const&); コピーコンストラクタは初期化が行われるときに実行される。初期化が…
引き続き本を読みながら勉強中。 オブジェクトを返す関数がある場合。 #include <iostream> using namespace std; class Test { public: Test() { cout << "Constructor\n"; } ~Test() { cout << "Destructor\n"; } }; Test func() { Test t; return t; } int main() {</iostream>…
C++の本を読みながら勉強。7ページ。 オブジェクトを関数で値渡しするときに注意すること。 #include <iostream> using namespace std; class Test { public: Test() { cout << "Constructor\n"; } ~Test() { cout << "Destructor\n"; } }; void func(Test t) { } int </iostream>…
C++の本を読みながら勉強中。5ページ。 クラスから作成したオブジェクトのコピーについて勉強。コピーコンストラクタとかいまいち理解していないなぁと実感。
引き続き本を読みながら勉強。3ページ。 #include <iostream> using namespace std; class TestB; class TestA { private: int m_value; public: TestA(int num) { m_value = num; } friend void func(TestA a, TestB b); }; class TestB { private: int m_value; publ</iostream>…
本を読みながらC++の勉強中。2ページ。 今回はフレンド関数について。 friendキーワードを付けた関数はクラスのprivateメンバへのアクセス権がある。 class Test { private: int m_num; public: Test(int num) { m_num = num; } friend void func(Test t); }…
C++の本を読みながら勉強。3ページ。 今回はオブジェクトへのポインタについて。とくに新しく知ったことはなく、自分の知識が間違っていないことの再確認といった感じ。
C++の本を読みながら勉強。4ページ。 クラスのコンストラクタに複数の引数があるときは次のような感じで初期値を設定してオブジェクトの配列を作成できる。 #include <iostream> using namespace std; class Point { int m_x; int m_y; public: Point(int x, int y) { </iostream>…
C++の本を読みながら勉強。3ページ。インライン関数について。 inline修飾子を付ければインライン展開される。でもあくまでコンパイラに対する要求であり、必ずインライン展開されるとは限らない。 となると自分であえてinlineを付ける必要はないのではない…