2017-10-01から1ヶ月間の記事一覧
面白いC++のテキストを見ています。 double d1 = 2.3; double d2(2.3); double d3{ 2.3 };//これでも出来る std::vector<int> v = { 1,2,3, }; std::vector<int> v2{ 1,2,3, };//これでも出来る int i1 = 7.2;//警告(切り捨てられる) int i2 = { 7.2 };//エラー int </int></int>…
Windowsのグラフィックス アーキテクチャの概要 アーキテクチャってなんだ? 構造とか構成のことか。 Windowsでは数種類のC++/COM APIがある。 ・グラフィックスデバイスインターフェイス(GDI) Windowsにもともと実装されていたグラフィックスインターフェイ…
COM オブジェクトの有効期間を管理する。 全てのCOMインターフェイスは、インターフェイスIUnknownを直接・間接的問わず継承する必要がある。 なぜならこのインターフェイスIUnknownはCOMオブジェクトがサポートしなければならない基本機能を提供しているか…
COMオブジェクトの作成 COMオブジェクトを作成する方法は2つある。 オブジェクトを実装するモジュールによって、そのオブジェクトのインスタンスを作成するために設計された関数を提供する。 COM によって CoCreateInstance という汎用作成関数を提供する。…
前回Windowsデベロッパーセンターの初心者用ページについていけなくなった件。 とりあえず、ぼんやりと理解できたから先に進む。 あ、前回わからなかったのを貼ってから進む。 #ifndef UNICODE #define UNICODE #endif #include <windows.h> template <class DERIVED_TYPE>//ウィンドウに関</class></windows.h>…
ウィンドウを作成する ウィンドウクラスを作成する。 C++のクラスとは違う。 ウィンドウクラスには複数のウィンドウが共通して実行する一連の動作が定義される。 共通しない部分(各ウィンドウ固有のデータ)はインスタンスデータと呼ばれる。 ウィンドウク…
Windowsデベロッパーセンターで初心者向けの1からの説明ページがあったから、そこで勉強する。 まず開発環境を準備する。 Windows SDKを入れましょう、ダウンロードはここから、みたいなのあるけど、よくわからない。リンク先はwindows7 とか書いてあるし、…
標準ヘッダファイルのことについて全然知らないので、勉強していく。 テキストの終わりに標準テンプレートライブラリ(STL)の一覧があったから上から見ていく。 algorithm 各種アルゴリズム どう使うのかさっぱり。 algorithm はあれか、要素に対して何かし…
表示された何かをキーボードで動かしたい。 全然わからないけど、GetKeyState関数を使ったらキーボードに反応した。 if (GetKeyState('D') < 0) ~~~~~~~~ 翌日 ~~~~~~~~ とりあえず、ビーム出して標的を破壊してみたかったから作ってみた。 …
ゲーム作りたいので最初はコンソールゲームというものから勉強していきます。 HANDLE hCons = GetStdHandle(STD_OUTPUT_HANDLE); コンソールでゲームするのに表示とかどうなっているのかさっぱりわからなくて調べたら、windowsで作る場合はwindowsのウィンド…
例外が最後までキャッチされないときに呼ばれる関数terminate terminate関数が呼ばれるとプログラムは異常終了する。 正確にはterminate関数はabort関数を呼び出して異常終了する。 exit関数は呼ばれないのでデストラクタも呼ばれない、正常な終了処理が行わ…
メモリ上にある値を使って計算を行うにはメモリからCPUへデータが読み込まれる。 CPUにもメモリとは別にデータを置いておく場所があり、この作業領域をレジスタという。レジスタは非常に高速なアクセス。CPUとレジスタの話? メモリからレジスタはそれなり。…
C言語で作られたライブラリをC++で使う場合には注意が必要。 CとC++では関数名の内部表現が違う。 内部表現はコンパイラ後の名前みたいなものか。 これがCとC++で違うってことはコンパイル後にお互いがわからなくなるのか。 これを解決するのがextern "言語…
通常の配列へのポインタはそのまま行ける。 二次元配列からは普通じゃいけない。 int array[3][5]; int* p = array; これはエラーになる。 int array[3]; int* p = array; ふつうの配列でこうやるけど、配列名はそのまま先頭要素のアドレスなので、 int arra…
マクロ引数に # をつけると文字列リテラルとして展開される。 #define TEST(n) cout << n << endl; int main() { TEST(i == 0); system("pause"); } これだとエラーになる。 #define TEST(n) cout << #n << endl; int main() { TEST(i == 0); system("pause"…
トークンはコード内で分割できない最小単位だったはず。 それを連結する・・? なんだろう。 まず、 TYPEDEF_CONTAINERS(int, int); こう書くと typedef vector<int> VectorInt; typedef list<int> ListInt; typedef set<int> SetInt; こう展開されるマクロを作りたいとする</int></int></int>…
第三引数?でいいのかな。を , で区切って行えるのはなぜ? for (int i = 0; i < size; ++i, ++j) { という話らしい。 これはfor文の機能ではない。 コンマ演算子というものの働き。 式1,式2 と書けば式1から順に処理される。 これ全体で1つの式だという…
構造体の話。 ん、わかりにくいな。 構造体でファイルのサイズとパス名を保存しておく場合に、 struct Fileinfo { int sizeFile;//ファイルサイズ char path[MAX_PATH];//パス名 }; こうすればいいけど、パス名を常に最大まで使うわけじゃない。 ほとんどが…
通常の型は最小単位でも1バイト 構造体や共有体の宣言時、メンバ変数名の後ろに : をつけて数値を書くと そのメンバ変数はビット単位になる。 struct Date { unsigned short year : 7;//7bit unsigned short month : 4;//4bit unsigned short day : 5;//5bi…
名前のない クラス 構造体 列挙体 共用体 を作ることが出来る。 struct Student { char name[MAX_NAME + 1]; int scoreJapanese; int scoreMath; int scoreEnglish; }student; 構造体の宣言と構造体変数の宣言。 下に書くと変数の宣言が出来るのか。 無名に…
メンバ変数が複数あるクラスで、状況によって使い分けるので常に1メンバ変数しか使用しない。という場合に、メモリ領域が無駄にならないようにする方法。 共用体という機能を使うと、複数のメンバ変数に対してメモリ領域は共有になる。 使い方は構造体の宣…
検索しやすいデータ構造の1つ データを保管する際ハッシュ関数を通す。 ハッシュ関数は様々なデータに対して、良い感じにグループ的な値を出してくれる関数。 ハッシュ関数を通ったデータはハッシュ関数が導き出したグループに所属する。 何かデータを検索…
前回やったデータ構造 ツリーの性能制限版 バイナリツリー 子ノードを最大で2つに制限したツリー これを利用したデータ構造で代表的なのが バイナリサーチツリー(二分探索木) 子ノードを追加して値を入れるときにそのノードより小さい場合は左へ、大きい…