コンストラクタはクラス宣言内でメンバ関数宣言されます そしてコンストラクタは自作関数なので定義を行う必要があります。

マックス「    



          コンストラクタとは



コンストラクタとはクラスのメンバ関数として設定されます



    クラス型のオブジェクト宣言を行って

 

     クラス型のオブジェクトを生成したときに


   

          🌞自動的に🌞



クラス型のオブジェクトのメンバ関数として


クラス型のオブジェクトのコンストラクタ(メンバメソッド)が


実行されます



コンストラクタの定義は自分で設定することになります。



ですから


コンストラクタの定義で


クラス型のオブジェクトのメンバ変数を初期化するよう


設定しておけば


クラス型のオブジェクト宣言をおこなって


クラス型のオブジェクトを作製したとき


         自動的に


クラス型のオブジェクトのメンバ関数として


クラス型のオブジェクトのコンストラクタが実行され


クラス型のオブジェクトのメンバ変数を初期化することができます。


また


クラス型のオブジェクトのコンストラクタは


クラス型のオブジェクトを生成したときに


            🌞自動的に🌞


実行される


クラス型のオブジェクトのメンバ関数という性質があるため


クラス型のオブジェクトを生成したときに


最初に


実行させたい命令文があれば


実行させたい命令文をコンストラクタの定義に記述しておけば


クラス型のオブジェクトを生成したときに


           自動的に


その命令文を


最初に実行させることができます。


となっている・・・・・・・・・


か・・・・・・・・・」



マックス「・・・・・・・・・・」


ソーラー「・・・・・・・・・・」


てんC「・・・・・・・・・・」





 マックス「理解不能だな」





 


             5日後







ソーラー「😊😊😊


それでは


実際にコンストラクタを定義していきましょう。」


マックス「コンストラクタはクラスのメンバ関数



自分で作製するメンバ関数なんだろう。


コンストラクタは自作関数ってことになるわけだ


どうだ ソーラー


この理解力は!


にゃはははっは


(メンバメソッドは基本的に自分で定義する必要があります)


コンストラクタはクラスのメンバ関数なので


まずは


     クラス内でコンストラクタのクラスのメンバ関数宣言がおこなわれている必要がある💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖


んだろう(*^▽^*)


そして


コンストラクタはクラスの(自作関数である)メンバ関数なので


その定義をおこなう必要があるってわけだ」


ソーラー「そうですね


コンストラクタは


クラス宣言内でメンバ関数宣言されている必要があります


classクラス名{


メンバ変数宣言;

メンバ変数宣言;

メンバ変数宣言;

コンストラクタのメンバ関数宣言;

メンバ関数宣言;

};


のようにです。


メンバ変数宣言

メンバ関数宣言

に混ざって

コンストラクタのメンバ関数宣言が行われています。


コンストラクタのメンバ関数宣言は


クラス名(引数);


となります。」


マックス「クラス名(引数);?


(コンストラクタ=自作関数)のメンバ関数宣言なのに


(コンストラクタ=自作関数)の名前は自分で設定できずクラス名となっているんかい」



ソーラー「そうなんです。


コンストラクタはちょっと特殊なメンバ関数なんです。


そして


コンストラクタは自作関数なので


メンバ関数宣言されているだけでなく


コンストラクタの定義が行われている必要があります。


コンストラクタは


クラス型のオブジェクトが生成されるときに


クラス型のオブジェクトのメンバ関数(コンストラクタ)として実行されるので


コンストラクタのメンバ関数宣言;


だけをクラス宣言内に記述し


コンストラクタの定義を記述していないと


クラス型のオブジェクトが生成されるとき


コンストラクタの定義が記述されていないと


ビルドエラーが表示されます。」


マックス「では・・・


クラス型のオブジェクトのコンストラクタは


クラス型のオブジェクトが生成されるときに


クラス型のオブジェクトのメンバ関数として実行されるのか・・・・・・?



はい?


いったい?


これは? ど~いうこと?


ソーラー「そこは実際にクラスのメンバ関数として


コンストラクタが用いられているプログラムを


見たほうがわかりやすいかな(^_^)/



コンストラクタの定義は


クラス名::クラス名(引数){


実行したい命令文;


}


のように記述することになります」


てんC「コンストラクタは


自作関数なのですが


コンストラクタの定義は


クラス名::クラス名(引数){


実行したい命令文;


}


となっています。


つまり


コンストラクタの名前は


クラス名::(引数)の


(引数)の


となります


自分で自作関数名を設定する必要がないのですね。


そして


コンストラクタの定義


クラス名::クラス名(引数){


実行したい命令文


}


をみてもおわかりになられますように


クラスのメンバ関数であることを示すクラス名::が


クラス名(引数)の前についています。


コンストラクタはクラスのメンバ関数なのですね。」



マックス「ふつう・・


自作関数の定義は


void newmadefunction(){}



int newmadefunction(){}


のように


戻り値を格納する型


voidや


intが


付くんじゃなかったか・・・」


てんC「自作関数であるコンストラクタの定義

👇


クラス名::クラス名(引数){


実行したい命令文


}

をご覧になられてもわかるように


自作関数であるコンストラクタの定義には戻り値の型はつきません。




コンストラクタでない


クラスCube型のメンバ関数display()のメンバ関数宣言が


次のように


記述されていて

👇


class Cube {


public:

int no;

public:

float tate;

public:

float yoko;

public:

float takasa;

public:

void display(); //自作関数display()はクラスCubeのメンバ関数とよばれます


};



クラスCubeのメンバ関数display()の定義は


void Cube::display() {


cout << "立方体につけられたナンバーは" << no << "です" << "\n";

cout << "立方体の縦の長さは" << tate << "です" << "\n";

cout << "立方体の横の長さは" << yoko << "です" << "\n";

cout << "立方体の高さの長さは" << takasa << "です" << "\n";


}


となっているとします



このように


コンストラクタでない


クラスCubeのメンバ関数display()の定義では


void Cube::display()と


クラスCubeのメンバ関数display()に


戻り値を格納する型voidが記述されていますが


自作関数であるコンストラクタの定義には

👇


クラス名::クラス名(引数){


実行したい命令文


}


👆上記のように戻り値を格納する型はもちいられません。」


マックス「い、いやあ・・・


ちょっとわかりにくいんですけど・・・」


ソーラー「!!」


てんC「びくっ!!」

  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る