[過去ログ] DXライブラリ 総合スレッド その4 (1001レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
16: 2009/08/10(月)16:52 ID:QAwN9V2J(4/5) AAS
structとclassは全く同じ。classはデフォがprivateになっただけの構造体。
メンバ関数は、隠れ引数として構造体へのポインタ*thisがこっそり付いただけ。つまり、
以下の二つは大体同じ意味のコード。
// Cっぽい版
struct vector2d {
float x, y;
};
inline void rotate_vector2d(vector2d *this, float theta) {
vector2d old = *this;
this->x = old.x * cosf(theta) - old.y * sinf(theta);
this->y = old.x * sinf(theta) + old.y * cosf(theta);
}
// C++版
struct vector2d {
float x, y;
void rotate(float theta) { // vector2d *this は隠れ引数として勝手に入る
vector2d old = *this;
x = old.x * cos(theta) - old.y * sin(theta); // メンバ変数アクセスは勝手にthis->が入る
y = old.x * sin(theta) + old.y * cos(theta);
}
};
仮想関数は、派生クラスの仮想関数へのポインタ一覧vtblが隠れグローバル定数として
用意されてて、派生クラスの実体にはvtblへのポインタであるvptrが隠れメンバ定数と
してくっついてる。で、仮想関数を呼ぶ時はvptrを通して参照する。
thisと違って、vtblやvptrには普通は触れない。触る必要も無いし。
クラスの仕組みはこんなもん。あとは使い方次第。
コンストラクタには変な仕様が色々くっついてるから覚えた方がいいけどな。
上下前次1-新書関写板覧索設栞歴
あと 985 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.011s