C/C++

C++のクラス

投稿日:2018年6月7日 更新日:

メンバ変数

 

メンバ変数がクラスの場合の初期化

クラスのメンバ変数が引数付きのコンストラクタの場合、メンバイニシャライザを使ってコンストラクタを呼び出す。

クラスのメンバ変数の引数付きのコンストラクタの呼び出し方のメモ

メンバイニシャライザを使おう

 

 

コンストラクタ

 

 

コピーコンストラクタ

  • コピーコンストラクタが呼ばれる時は、 ①オブジェクトの初期化時、②オブジェクトを関数に値渡しするとき、③ 関数からオブジェクトを値渡しする時
  • コピーコンストラクタは代入では作用しない。Kitty obj; obj = g_obj; では呼ばれない。
  • 関数にオブジェクトを渡したり、あるいは戻り値として受け取った場合、オブジェクトはビット単位でそっくりそのままコピーされる(デフォルトのコピーコンストラクタの場合)。
  • 前途のように、引数に渡したインスタンスがコピーされる時、コピーコンストラクタが呼び出されるが、コピーコンストラクタの実装によっては、元のインスタンスと完全に同じデータが渡されるとは限らなくなります。
  • 明示的的に定義しない時は、デフォルトのコピーコンストラクタがコールされる。デフォルトのコピーコンストラクタでは、メンバー変数もコピーしてくれる。明示的的に定義した場合は、コピーコンストラクタに必要であればメンバー変数のコピー処理を記述する必要がある。
  • そのオブジェクトが動的に割り当てたメモリ領域へのポインタ型メンバ変数を保有していた場合、このポインタのアドレスも同じものを指すので、データの整合性が保てなくなる。また、それぞれのオブジェクトのデストラクタ関数で2度にわたって同じ領域が解放される危険性がある。

 

 

 

 

引数

値渡しの場合はコピーされる(コピーコンストラクタが呼ばれる)。その変数が非常に大きなサイズを持つ構造体の場合、不必要なコピーを避ける目的でポインタが使われることがあるが、C++では、ポインタ渡しでなく、参照渡しとする。

 

 

参照したページ

値渡しか、参照渡しか

 

 

 

スポンサーリンク

スポンサーリンク

-C/C++

執筆者:

関連記事

C言語その他

グローバル変数のstatic属性 グローバル変数にstaticを付けた時のstaticは「静的」という意味ではなく、スコープが「宣言位置からそのコンパイル単位の終わりまで」となる。 第10回目 4大メ ...

C++言語

  C++言語 概要 C++入門 C++で開発 C++で作成したDLLを他の言語で利用できるようにする | 二流プログラマの三流な日常 非情報系学生のための C/C++ 入門 C/C++のG ...

ポインタ

  ポインタ int* a 変数 a の中身はアドレスを示す。 ポインタ変数 *a はアドレス(aの値)のメモリの値をポインタ変数(*a)として扱う事ができる。 *a=1; はaの値(アドレ ...

C++のTIPS

・それ、ポインタ使わなくてもできるよ:C言語のポインタとC++の流儀 ・【C言語/C++】 配列は戻り値にできない【配列を適切に返す方法】    

C++の参照

参照変数 参照の宣言 : 「 参照先の型&  参照変数名 = 参照先の変数; 」 参照変数は宣言と同時に代入する必要がある。初期化で必ず参照先の変数を指定する必要がある。参照とは「他の変数を指 ...