クラスのメンバ関数の引数にクラスのメンバ変数ではない変数を設定してみよう。その2

#include <iostream>


using namespace std;


class Cube {


public:

int no; //変数noはクラスCubeのメンバ変数とよばれます

float tate; //変数tateはクラスCubeのメンバ変数とよばれます

float yoko; //変数yokoはクラスCubeのメンバ変数とよばれます

float takasa; //変数takasaはクラスCubeのメンバ変数とよばれます

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


};


void Cube::display() {


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

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

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

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


}



int main() {


Cube cube1;


//👆cube1のクラスCube型のオブジェクト宣言をおこなっています


cube1.no = 1;

cube1.tate = 2.0;

cube1.yoko = 3.0;

cube1.takasa = 4.0;


cube1.display();


return 0;

}


プログラムの実行結果


立方体につけられたナンバーは1です

立方体の縦の長さは2です

立方体の横の長さは3です

立方体の高さの長さは4です


マックス「このプログラムでは


Cubeのクラス宣言内で


メンバ関数宣言


void display();


が記述されているだろう。


この


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


void Cube::display() {


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

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

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

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


}


となっているだろ。


main関数内で


cube1のクラスCube型のオブジェクト宣言


Cube cube1;


の実行後


クラスCube型のオブジェクトcube1のメンバ関数


cube1.display();


が実行されるときは


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


変数

no

tate

yoko

takasa



クラスCube型のオブジェクトcube1のメンバ変数


cube1.no

cube1.tate

cube1.yoko

cube1.takasa


が代入された


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

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

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

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


が実行される


cube1.no

cube1.tate

cube1.yoko

cube1.takasa


には


1

2.0

3.0

4.0


が代入されているので


プログラムの実行結果


立方体につけられたナンバーは1です

立方体の縦の長さは2です

立方体の横の長さは3です

立方体の高さの長さは4です


が表示される


変数

no

tate

yoko

takasa

猫がでたらめに投入されているわけではないな😊」




てんC「はい、そのとおりですね。マックスさん」




マックス「ふはははははははははは~~~~


そうだろう、そうだろう


ところで


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


なにか変数宣言を使用したい場合は


どうしたらいいんだ。」


ソーラー「はい??」


マックス「display()の()の中だよぉ 中😸」


ソーラー「??」


ソーラー「??え?」


マックス「ようは


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


void Cube::display() {


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

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

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

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


}


でなく


void Cube::display(int e) {


cout<<"今日の立方体は"<<e<<"円になります"<< "\n";


}


のように定義する


このように


クラスCubeのメンバ関数display()の引数として


変数宣言


int e


をもってきたいということだよ~んん。」



ソーラー「このクラスCubeのメンバ関数display(int e)は・・・」



🐤   🐤   🐤   🐤   🐤   🐤   🐤   🐤



         "クラスとは"



"あるモノのデータを格納する変数とそのデータを格納している変数に作用する関数を1つにまとめるためにあります"


そして



        "クラスとは"


"ついでに そのクラスに含めておくと便利そうな関数をまとめておくためにある"


のですね


このように定義された

👇

void Cube::display(int e) {


cout<<"今日の立方体は" <<e<<"円になります"<< "\n";


}

👆

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


クラスCubeのメンバ変数

no

tate

yoko

takasa

は用いられていません


つまり


クラスCubeのメンバ関数display(int e)は


立方体dube1のデータを格納している変数に作用する関数ではないのですが


クラスCubeにまとめておくと便利なので


クラスCubeのメンバ関数となっています


🐤   🐤   🐤   🐤   🐤   🐤   🐤   🐤


ソーラー「


void Cube::display(int e) {


cout<<"今日の立方体は" <<e<<"円になります"<< "\n";


}




定義された


クラスCubeのメンバ関数


void display(int e)


ですか・・・


クラスCubeのメンバ関数が

さきほどの

void display()

から

void display(int e)

に変化しているね・・・


ということは


この自作関数displayの🐤クラスCubeぽっぽ🐤の


          🍅メンバ関数宣言🍅は


void display();


void display(int e);


になるということかな?


おもしろいね


ということは


クラス宣言も


書き換えられて


class Cube {


public:

int no; //変数noはクラスCubeのメンバ変数とよばれます

float tate; //変数tateはクラスCubeのメンバ変数とよばれます

float yoko; //変数yokoはクラスCubeのメンバ変数とよばれます

float takasa; //変数takasaはクラスCubeのメンバ変数とよばれます

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


};


ではなく


class Cube {


public:

int no;

float tate;

float yoko;

float takasa;


void display(int e);

/*🌞🌞🌞👆

ここの部分がvoid display(); からvoid display(int e);

に変更されています🌞🌞🌞*/

};


になるということかな」


ぶーにゃん「ということはだにゃ~ん


にゃ~んん


main関数内で


クラスCube型のオブジェクトcube1のメンバ関数


cube1.display(int e);


を実行するには


cube1のクラスCube型のオブジェクト宣言


Cube cube1;


を実行して


クラスCube型のオブジェクトcube1のメンバ変数


cube1.no

cube1.tate

cube1.yoko

cube1.takasa

クラスCube型のオブジェクトcube1のメンバ関数


cube1.display(int e)


を使用できる状態にしてから


cube1.display(int e);


を実行すればいいのかにゃ?」


ソーラー「う~んん


引数である


int e



数値データを代入していない状態では


cube1.display(int e);


は実行、できないとおもうな」


てんC「そうなのです。


例えば


void function(int x){

cout<<x<<"\n";

}


と定義された


自作関数functionを


main関数内で実行するには


function(1);


のように


int xに1を代入する必要がありました。


同様に


クラスCubeのメンバ関数宣言


void.display(int e);


の引数に


変数宣言


int e


が記述されている場合は


クラスCube型のオブジェクトcube1のメンバ関数


cube1.display(int e)


を実行する際は


cube1.display(int e);



変数宣言


int e


に数値データを代入して実行することになります


たとえば


cube1.display(100);


のように実行することになります。」


マックス「そうなのか~~


お兄ちゃんは 感心するぞ


ということで


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


int e


が記述された


void Cube::display(int e) {


cout<<"今日の立方体は" <<e<<"円になります"<< "\n";


}

をもちいて


プログラムを実行してみようではないか」


ソーラー「これまた面白そうなことになってきたね。」


#include <iostream>


using namespace std;


class Cube{


public:

int no;

float tate;

float yoko;

float takasa;

void display(int e);

/*🌞🌞🌞👆

ここの部分がvoid display(); からvoid display(int e);

に変更されています🌞🌞🌞*/

};


void Cube::display(int e) {


cout<<"今日の立方体は" <<e<<"円になります"<< "\n";


}


/*👆クラスCubeのメンバ関数となっている自作関数display(int e)の定義をおこなっています*/


int main() {


Cube cube1;


//👆cube1のクラスCube型のオブジェクト宣言をおこなっています


cube1.no = 1;

cube1.tate = 2.0;

cube1.yoko = 3.0;

cube1.takasa = 4.0;


cube1.display(100);//👈引数に数値データを代入しました


return 0;

}


プログラムの実行結果


今日の立方体は100円になります


マックス「やったな!


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


引数に


変数宣言

int e


をもちいて


クラスCube型のオブジェクトcube1のメンバ関数


cube1.display(100);


を実行することができたじゃないか


着実に進んでるじゃないか。(*^▽^*)」


てんC「


cube1のクラスCube型のオブジェクト宣言


Cube cube1;


が実行されると


クラスCube型のオブジェクトcube1のメンバ変数


cube1.no

cube1.tate

cube1.yoko

cube1.takasa


クラスCube型のオブジェクトcube1のメンバ関数


cube1.display(int e)


が生成されます


そして


int e


100

が代入された


cube1.display(100);


が実行されるとき


クラスCubeのメンバ関数displayの定義内の命令文が実行されることになります


そのとき


もし


クラスCubeのメンバ変数

no

tate

yoko

takasa



クラスCubeのメンバ関数displayの定義内で使用されていれば


クラスCubeのメンバ変数

no

tate

yoko

takasa


クラスCube型のオブジェクトcube1のメンバ変数

cube1.no

cube1.tate

cube1.yoko

cube1.takasa


を表すことになりますが


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

👇

void Cube::display(int e) {


cout<<"今日の立方体は" <<e<<"円になります"<< "\n";


}


👆

内で


クラスCubeのメンバ変数

no

tate

yoko

takasa

は用いられていません。


ですので


クラスCube型のオブジェクトcube1のメンバ関数


cube1.display(100);


が実行されるとき


e

100

が代入された


cout<<"今日の立方体は" <<100<<"円になります"<< "\n";



そのまま実行されることになります


クラスCube型のオブジェクトcube1のメンバ変数

cube1.no

cube1.tate

cube1.yoko

cube1.takasa


は関係してこないことになりますね」


マックス「


cube1.display(100)は


クラスCube型のオブジェクトcube1のメンバ関数なんだが


クラスCube型のオブジェクトcube1のメンバ変数


cube1.no

cube1.tate

cube1.yoko

cube1.takasa


は関係してこないことになるってことか



メンバ関数の定義に必ずしも


メンバ変数がもちいられていなくてもいいってわけだ



てんC「そうなんです マックスさん😊」




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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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