最終更新:2013-01-18 (金) 06:55:25 (4109d)
C++/クラス
例
//クラスの定義 class SampleClass { public: SampleClass(); // コンストラクタ ~SampleClass(); // デストラクタ void hogeMethod(); private: int m_num; }; /*メソッドの実装*/ //コンストラクタ void SampleClass::SampleClass(){ } //デストラクタ void SampleClass::~SampleClass(){ } //普通の関数 void SampleClass::hogeMethod(){ } SampleClass hogeInstance; //メンバの呼び出し hogeInstance.hoge();
アクセス指定子
指定しなければprivate (structではpublic)
C++/構造体との違い
- C++のクラス (class) = C++の構造体 (struct)
- class のデフォルトのアクセス修飾子?が private になっているの対し、 struct のアクセス修飾子?は public
継承
// 継承を行うクラス定義 class サブクラス: public 親クラス // 継承 { public: void Func(); };
コンストラクタとか
- 下記の順で呼び出される
- 親クラスのコンストラクタ
- サブクラスのコンストラクタ
- サブクラスのデストラクタ
- 親クラスのデストラクタ
privateな継承
- privateな継承を行うと、サブクラス側からは、親クラスの全てのメンバが private として宣言されているように見える
- サブクラスのインスタンスを、親クラスの型としては扱えない
protectedな継承
- 親クラスの
- "public" と "protected" なメンバは "protected"
- "private" なメンバは "private" のままに見える
オーバーライド
インターフェイスクラス
- C++には直接的にインタフェースクラスは用意されていない
- メンバ関数の宣言の 最後に「=0」を付けると、そのメンバ関数の定義を省略できます。
- 定義が省略されるので、このクラスをインスタンス化することはできなくなります。
純粋仮想関数
静的メンバ変数? (static)
- そのクラスのインスタンスを何個生成しようと、メモリ上にただ1つしか存在しないという特殊なメンバ変数
- イメージ的にはグローバル変数のような感じであって、スコープがそのクラスに限定される
- インスタンスを生成しなくても、静的メンバ変数だけは存在する
宣言
- 宣言は.hに書く
class CSample { public: private: static int m_color; // 静的メンバ変数 };
- メンバ変数の実体は短ければ(アクセッサとか)宣言部に書いても良い(内部定義)
実体
- グローバル変数のようなものなので、.cppの方に書く(外部定義)
int CSample::m_color = 10; // 静的メンバ変数の実体
静的メンバ関数?
- インスタンスを生成しなくても、呼び出すことが可能
- 静的メンバ関数からは、静的でないメンバ変数にアクセスすることができない
- 静的メンバ関数から、静的でないメンバ関数を呼び出すこともできない