最終更新:2013-01-18 (金) 06:55:25 (2340d)  

C++/クラス はてなブックマークを見る
Top / 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++/構造体との違い

継承

// 継承を行うクラス定義
class サブクラス: public 親クラス // 継承
{
public:
	void Func();
};
  • サブクラス側が、class であれば ":" の後ろには private があるものとみなす。
  • サブクラス側が、struct であれば ":" の後ろには public があるものとみなす。

コンストラクタとか

  • 下記の順で呼び出される
    • 親クラスのコンストラクタ
    • サブクラスのコンストラクタ
    • サブクラスのデストラクタ
    • 親クラスのデストラクタ

privateな継承

  • privateな継承を行うと、サブクラス側からは、親クラスの全てのメンバが private として宣言されているように見える
  • サブクラスのインスタンスを、親クラスの型としては扱えない

protectedな継承

  • 親クラスの
    • "public" と "protected" なメンバは "protected"
    • "private" なメンバは "private" のままに見える

オーバーライド

インターフェイスクラス

  • C++には直接的にインタフェースクラスは用意されていない
  • メンバ関数の宣言の 最後に「=0」を付けると、そのメンバ関数の定義を省略できます。
  • 定義が省略されるので、このクラスをインスタンス化することはできなくなります。

純粋仮想関数

  • virtualの付いたメンバ関数を仮想関数というのでしたが、更に末尾に「=0」を付けると、純粋仮想関数と呼ばれます。

静的メンバ変数? (static)

  • そのクラスのインスタンスを何個生成しようと、メモリ上にただ1つしか存在しないという特殊なメンバ変数
  • イメージ的にはグローバル変数のような感じであって、スコープがそのクラスに限定される
  • インスタンスを生成しなくても、静的メンバ変数だけは存在する

宣言

  • 宣言は.hに書く
    class CSample
    {
    public:
    private:
    	static int m_color;   // 静的メンバ変数
    };
  • メンバ変数の実体は短ければ(アクセッサとか)宣言部に書いても良い(内部定義)

実体

  • グローバル変数のようなものなので、.cppの方に書く(外部定義)
    int CSample::m_color = 10;  // 静的メンバ変数の実体

静的メンバ関数?

  • インスタンスを生成しなくても、呼び出すことが可能
    • 静的メンバ関数からは、静的でないメンバ変数にアクセスすることができない
    • 静的メンバ関数から、静的でないメンバ関数を呼び出すこともできない

関連

  • ローカルクラス?
  • テンプレートクラス?
  • 内部クラス?

参考