Cpp クラス コンストラクタ 新しいページはコチラ
提供: yonewiki
(→クラス コンストラクタ) |
|||
1行: | 1行: | ||
+ | [[C PlusPlus#C++からの技術|C++]]に戻る | ||
+ | |||
+ | |||
<table class="mbox-small" style="border:1px solid #aaa; background-color:#f9f9f9; width:22em;" id="RealTitleBanner"> | <table class="mbox-small" style="border:1px solid #aaa; background-color:#f9f9f9; width:22em;" id="RealTitleBanner"> | ||
<tr> | <tr> | ||
<td style="width:1px;"></td> | <td style="width:1px;"></td> | ||
− | <td class="mbox-text plainlist" style="">本来の表記は「<b><span id="RealTitle" style="font-size:large;">C++ クラス コンストラクタ</span></b>」です。この記事に付けられた題名は{{記事名の制約}}から不正確なものとなっています。</td> | + | <td class="mbox-text plainlist" style="">本来の表記は「<b><span id="RealTitle" style="font-size:large;">C++(Cpp) クラス コンストラクタ</span></b>」です。この記事に付けられた題名は{{記事名の制約}}から不正確なものとなっています。</td> |
</tr> | </tr> | ||
</table> | </table> | ||
8行: | 11行: | ||
<br /> | <br /> | ||
== '''クラス コンストラクタ''' == | == '''クラス コンストラクタ''' == | ||
+ | |||
コンストラクタとは、クラスが実体化されたとき、クラス変数が作られたときに自動的に呼び出される関数です。変数生成時に初期化引数を与えられた場合には、自動的に呼び出される関数が引数の形式と一致するものが呼び出されます。 | コンストラクタとは、クラスが実体化されたとき、クラス変数が作られたときに自動的に呼び出される関数です。変数生成時に初期化引数を与えられた場合には、自動的に呼び出される関数が引数の形式と一致するものが呼び出されます。 | ||
14行: | 18行: | ||
− | + | 自動的に呼び出される関数ですが、呼び出さないようにする方法はあるのでしょうか?それはプログラムとして何も記述しなければいいだけのことです。実際には、呼び出されているのかもしれませんが、何もしないことに変わりないので、それでよしとするしかありません。ん~でも、コンストラクタ中で自分自身のクラスを呼び出したりすると再帰的に呼び出されたりして、ややこしいことになりそうです。いや、なります。最悪は無限にループします。危険です。自動で呼び出されるというのは、実に危険なことです。やっていいことと悪いことが発生します。そこは肝に銘じておかなければならないでしょう。基本的にコンストラクタは、クラスを初期化するために使います。それには、どこからか値を取得する処理をしたりすることもあれば、メンバ変数に値を代入したりすることもあると思います。クラスを使うための構築時に何かを作業するモノとしての役割を担います。よくプログラムでは構築という言葉を使うので構築者という表現のほうがピンとくる人もいるやもしれません。 | |
48行: | 52行: | ||
int _tmain(int argc, _TCHAR* argv[]) | int _tmain(int argc, _TCHAR* argv[]) | ||
{ | { | ||
− | CConstructor001 | + | CConstructor001 CConstructor001_obj; |
return 0; | return 0; | ||
} | } | ||
106行: | 110行: | ||
− | + | int型の引数をとるコンストラクタを作成しましたので、以下のような感じでクラス変数や実体を作るような処理の初期化が実施できるようになります。3つめの代入するような記述方法では、複数の引数を設定できないので、少し特殊な初期化になってしまいます。配列を初期値に渡せる場合は配列の初期化のような記述もできるでしょう。 | |
+ | |||
+ | |||
+ | * '''CConstructor001* CConstructor001_Instance = new CConstructor001(1);''' | ||
+ | * '''CConstructor001 CConstructor_obj(1);''' | ||
+ | * '''CConstructor001 CConstructor2_obj = 1;''' | ||
+ | |||
+ | |||
+ | いろいろな引数のコンストラクタを定義することのサンプルの説明については省略しますが、引数の個数によって処理を変える場合は、選択されるコンストラクタの関数の各処理で不具合が怒らないように慎重に作らなければならないことに注意が必要です。引数の個数によってまったくことなるプログラムが実行されるということを覚えておきましょう。こういった同じ関数名で引数の種類だけをかえた関数を作ることもオーバロードと表現することがあります。オーバロードを活用する手法については議論や検討やさらなる学習が必要になると思います。 | ||
+ | |||
+ | |||
+ | [[C PlusPlus#C++からの技術|C++]]に戻る |