C++において重要なクラスについてのメモ。
更新履歴
- [2013.07.18] MacOS X ターミナルでのコンパイルのコマンドを追加しました。
- [2013.07.17] コードの誤りを修正し、インデントのルールを変更しました。
- [2013.07.16] アクセス指定子と範囲についての説明を追加しました。
INDEX
C++のクラスについて
コンストラクタ関数とデストラクタ関数
クラスにはインスタンス生成時に1度だけ実行されるコンストラクタと、インスタンスが削除されるときに実行されるデストラクタが定義できる。
クラス・インターフェースのアクセス指定子と範囲
アクセス指定子 | 説明 |
---|---|
なし | クラス内から使用可能(privateと同じ) |
public | 外部のクラスから使用可能 | private | クラス内から使用可能 |
protected | privateと同じ(サブクラスからはpublicになる) |
- SampleClass.h
- [code]
class SampleClass {
public:
SampleClass(int n); // コンストラクタ
~SampleClass(); // デストラクタ
void print();protected:
int num;
};
[/code]
補足説明
- コンストラクタはクラス名と同名。引数を取ることは可能だが戻り値はない。
- デストラクタはクラス名の前に「~」を付ける。引数も戻り値もない。
- クラス定義の最後は ;(セミコロン)で終わる。
- SampleClass.cpp
- [code]
#include “SampleClass.h”
#include <iostream>
using namespace std;// コンストラクタ
SampleClass::SampleClass(int n)
{
cout << "コンストラクタ" << n; num = n; } // デストラクタ SampleClass::~SampleClass() { cout << "デストラクタ" << num; } void SampleClass::print() { cout << "print" << num; } [/code]
補足説明
- メンバ関数は 戻り値 クラス名::関数名 と記述し実装する。(::はスコープ演算子)
- main.cpp
- [code]
#include “SampleClass.h”int main()
{
SampleClass sample(1);
sample.print(); // 1と表示されるSampleClass *pOut = new SampleClass(10); //newでSampleClassインスタンスを生成
pOut->print(); // 10と表示される
delete pOut; // インスタンスを解放
}
[/code]
補足説明
- newでインスタンスを生成した場合は、必ずdelete演算子で開放する。
- オブジェクトからクラスメンバにアクセスする場合にはドット演算子を使う。
- ポインタからクラスメンバにアクセスする場合にはアロー演算子を使う。
コンパイル(MacOS X Terminal)
[code]
g++ -o SampleClass main.cpp SampleClass.cpp
[/code]
- 結果
- [code]
コンストラクタ1
print1
コンストラクタ10
print10
デストラクタ10
デストラクタ1
[/code]
まとめ
変数とポインタ変数についてもこの際しっかり理解しておく必要がありますね。