C/C++ ポインタ入門 > ポインタと構造体・クラス
Nobuhide Tsuda
Oct-2013
ポインタと構造体・クラス
- 構造体とは、関連する複数のデータをひとつにまとめたもの。
- クラスとは、構造体のデータメンバを操作するメンバ関数を加えたもの。
- 構造体・クラス宣言は「struct」・「class」で始め、構造体・クラス名 { メンバ宣言... }; という書式
struct Hoge
{
int m_data; // データメンバ
.....
};
class Fuga
{
public:
Fuga(); // コンストラクタ
~Fuga(); // デストラクタ
public:
bool isFuga() const; // メンバ関数
.....
private:
int m_data; // データメンバ
.....
};
古いCでは typedef struct タグ名 { メンバ変数宣言… } 構造体名; という書き方をする。
- この書き方は現在でも可能であるが、冗長なので、使用しない方がよいと考える。
C の場合
C++ の場合
- 構造体・クラス名をTとすると、T *ptr = new T; で構造体・クラスオブジェクトを生成する。
- ptr = new T(); と記述してもよい
- 単に T obj; と記述すると、現在のスコープ内で、構造体・クラスオブジェクトが生成される。
- 注意: T obj(); と記述すると、T 型を返す関数宣言と見なされる。
- オブジェクト生成時にデフォルトコンストラクタが呼ばれる
- デフォルトコンストラクタとは構造体・オブジェクト名と同じ名前のメンバ関数(のようなもの)。
- () 内に引数を指定した場合は、引数列にマッチするコンストラクタが呼ばれる。
- ポインタが指す先の構造体・クラスのデータメンバは「ptr->メンバ名」で参照する。
- (*ptr).メンバ名 で参照してもよい。
- 実態とポインタで、メンバを参照するための演算子が異なるのは C の文法上の不備
- ポインタが指す先のメンバ関数をコールする時は「ptr->メンバ関数名(引数)」と記述する
- ptr = new T; で生成したオブジェクトを破棄する場合は delete ptr; を記述する。
前:ポインタへのメモリ割り当て
|上:C/C++ ポインタ入門
|次:ポインタへのポインタ