オブジェクト宣言Cube* aに&cube1が代入されるとオブジェクトcube1のメンバ関数cube1.displayはa->display()で表されることになります

ソーラー「前のエピソードでは自作関数の定義は


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)


の引数となっているCube* aに


クラスCube型のオブジェクトcube1のアドレス&cube1を代入すると



オブジェクトa

アロー演算子を用いた


a->no

a->tate

a->yoko

a->takasa


オブジェクトcube1のメンバ変数のアドレス

&cube1.no

&cube1.tate

&cube1.yoko

&cube1.takasa

のメモリに格納されている数値データを表しました😊


すなわち

a->no

a->tate

a->yoko

a->takasa

cube1.no

cube1.tate

cube1.yoko

cube1.takasa


そのものをあらわすことになったわけです。」


マックス「このとき、クラスCubeのメンバ関数


display()


にアロー演算子を用いた


a->display()



cube1.display()


をあらわしたりしてな。(´▽`*)」


ソーラー「びくっ するどいですね。


オブジェクトa


アロー演算子を用いた


a->display()



cube1.display()を表すことになります


ほんとにそうなるかな😊


と思われるかもしれません。


そこで


Cube* aにオブジェクトcube1のアドレス&cube1


を代入したとき


オブジェクトaにアロー演算子を用いた


a->display()


cube1.display()をあらわすことになるか調べてみたいと思います


そこで


自作関数の定義を


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)

{

a->display();

/*🌞 自作関数の定義にa->display()のみを記述しました。

Cube* aにオブジェクトのアドレス&cube1が代入されると

a->display()

cube1.display()をあらわすことになります。*/


return;

}


に変更したプログラムを実行してみたいと思います。



#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";


}


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



void Cubedata2baihyouji(Cube* a)

{


a->display();

/*🌞 a->display()のみを記述しました。

Cubedatadisplay* aにオブジェクトcube1が代入されると

a->display();

cube1.displayをあらわすことになります。*/


return;

}

/*👆クラスCubeのメンバ関数でない


普通の自作関数Cubedata2baihyoujiの定義をおこなっています


引数に


aのクラスCube*(アスタリスク) 型のポインタ変数宣言

を行うことにより

main関数内でクラスCube型のオブジェクト宣言により

作製されたオブジェクトcube1のアドレス&cube1を

Cube*(アスタリスク) 型のポインタ変数aに代入することができます

*/


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);


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

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

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

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


return 0;

}





プログラムの実行結果


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

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

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

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

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

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

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

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

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

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

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

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


マックス

「Cube* aにオブジェクトcube1が代入されたとき


a->display();

の実行結果は


cube1.display();


の実行結果と等しくなっている!


a->display();

cube1.display();


をあらわすことになる仕組みというわけか」





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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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