自作関数の引数にクラス型のオブジェクト宣言を設定しmain関数内で宣言されたクラスのオブジェクトを代入することができます。その際 値渡しとなります その2

ソーラー「


#include <iostream>


using namespace std;


class Cube {


public:

int no;

public:

float tate;

public:

float yoko;

public:

float takasa;

public:

void display();


};


void Cube::display() {


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

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

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

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


}


void Cubedata2baihyouji(Cube a)

{

a.no = 2 * a.no;

a.tate = 2 * a.tate;

a.yoko = 2 * a.yoko;

a.takasa = 2 * a.takasa;


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

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

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

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


return;

}

//👆クラスCubeのメンバ関数でない普通の自作関数Cubedata2baihyoujiの定義をおこなっています


int main() {


Cube cube1;


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


cube1.no = 1;

cube1.tate = 2.0;

cube1.yoko = 3.0;

cube1.takasa = 4.0;


cube1.display();


Cubedata2baihyouji(cube1);


cube1.display();


return 0;

}



ビルド実行結果


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

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

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

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

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

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

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

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

立方体につけられたナンバーは1です//👈ここに注目

立方体の縦の長さは2です//👈ここに注目

立方体の横の長さは3です//👈ここに注目

立方体の高さの長さは4です//👈ここに注目


ソーラー「


このプログラムでは


          🍓main関数内で🍓


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


            Cube cube1;


により作製された


            オブジェクトcube1が



          Cubedata2baihyouji(cube1);


の実行時


         🍅 Cubedata2baihyouji(Cube a)🍅


の引数となっている


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


Cube aに代入されていますが


オブジェクトcube1


そのものが


オブジェクトaに


代入されているわけではありません。


オブジェクトcube1のメンバ変数


          cube1.no

          cube1.tate

          cube1.yoko

          cube1.takasa  



オブジェクトaのメンバ変数


a.no

a.tate

a.yoko

a.takasa


に代入されるのでもありません


このとき


正確には


オブジェクトcube1のメンバ変数


          cube1.no

          cube1.tate

          cube1.yoko

          cube1.takasa  


に格納されている🌞数値データ🌞が



オブジェクトaのメンバ変数


  a.no

  a.tate

  a.yoko

  a.takasa


に代入されることになります。(*^▽^*)」


てんC「ソーラーさん


オブジェクトcube1のメンバ変数


          cube1.no

          cube1.tate

          cube1.yoko

          cube1.takasa  


に格納されている🌞数値データ🌞


1

2.0

3.0

4.0

だけが



オブジェクトaのメンバ変数


  a.no

  a.tate

  a.yoko

  a.takasa




             💖値渡し💖



されているのですね」



ソーラー「そうなんだ


では


          Cubedata2baihyouji(cube1);


の実行時



オブジェクトcube1のメンバ変数


          cube1.no

          cube1.tate

          cube1.yoko

          cube1.takasa  


に格納されている🌞数値データ🌞


1

2.0

3.0

4.0


オブジェクトaのメンバ変数


a.no

a.tate

a.yoko

a.takasa


に代入されるならば


どのように自作関数 Cubedata2baihyoujiが


実行されるか見ていきましょう。


まずは


自作関数Cubedata2baihyoujiの定義


void Cubedata2baihyouji(Cube a)

{

a.no =2*a.no;

a.tate =2* a.tate;

a.yoko=2* a.yoko;

a.takasa =2* a.takasa;


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

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

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

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


return;

}



void Cubedata2baihyouji(Cube a)


の部分をみてよ


自作関数Cubedata2baihyouji


の引数の部分()内に


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


Cube a


が記述されています。😊



main関数内で


自作関数


Cubedata2baihyouji(cube1);


が実行される際


         この引数となっている部分の


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

            

             Cube a


               の


          🍓オブジェクトaに🍓



main関数内で


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


Cube cube1;


の実行により作製された


            🍋オブジェクトcube1🍋


が代入されています。


すると


自作関数Cubedata2baihyoujiの定義内の


オブジェクトaの

メンバ変数

a.no

a.tate

a.yoko

a.takasa

オブジェクトcube1の

メンバ変数

cube1.no

cube1.tate

cube1.yoko

cube1.takasa


が代入されるのではなく


正確には


オブジェクトaの

メンバ変数

a.no

a.tate

a.yoko

a.takasa


オブジェクトcube1の

メンバ変数

cube1.no

cube1.tate

cube1.yoko

cube1.takasa


が格納している数値データ


1

2.0

3.0

4.0


が代入、値渡しされることになります。


つまり


a.no =1;

a.tate=2.0;

a.yoko=3.0;

a.takasa=4.0;


が実行されているんだ。(´▽`*)


次に


a.no =2*a.no;

a.tate =2* a.tate;

a.yoko=2* a.yoko;

a.takasa =2* a.takasa;


が実行されると


オブジェクトaの

メンバ変数

a.no

a.tate

a.yoko

a.takasa

格納されている数値データは


1

2.0

3.0

4.0

から

2

4.0

6.0

8.0

になります。


すると

           

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

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

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

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


の実行結果は


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

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

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

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


となるというわけです


もちろん


オブジェクトcube1のメンバ変数


          cube1.no

          cube1.tate

          cube1.yoko

          cube1.takasa  


に格納されている🌞数値データ🌞


1

2.0

3.0

4.0


だけが


オブジェクトaのメンバ変数


a.no

a.tate

a.yoko

a.takasa


に代入されるという


            🌞値渡し🌞


が実行されているので


オブジェクトaのメンバ変数


a.no

a.tate

a.yoko

a.takasa


に格納されている数値データが


自作関数

Cubedata2baihyouji(cube1);


の操作を受けて

1

2.0

3.0

4.0


から


2

4.0

6.0

8.0


になったとしても


main関数内で


オブジェクト宣言されたオブジェクトcube1のメンバ変数


cube1.no

cube1.tate

cube1.yoko

cube1.takasa


に格納されている数値データは影響をうけることなく


1

2.0

3.0

4.0

のまま


変化しません。


プログラム内の


cube1.no = 1;

cube1.tate = 2.0;

cube1.yoko = 3.0;

cube1.takasa = 4.0;


cube1.display();//👈


Cubedata2baihyouji(cube1);


cube1.display();//👈


のビルド実行結果


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


Cubedata2baihyouji(cube1);


の実行の前後の


cube1.display();


のビルド実行結果が


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

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

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

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


のままなことからも


オブジェクトcube1のメンバ変数


cube1.no

cube1.tate

cube1.yoko

cube1.takasa


に格納されている数値データが


1

2.0

3.0

4.0


のまま変化していないことがわかりますね。」


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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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