🌻天国にいけるC++言語入門🌻 進化し続けるオブジェクト指向プログラミング ver3.2307
クラス型の配列宣言を実行した場合に生成されるオブジェクトのメンバ関数をクラスアスタリスク型のポインタ変数をつかって実行してみましょう
クラス型の配列宣言を実行した場合に生成されるオブジェクトのメンバ関数をクラスアスタリスク型のポインタ変数をつかって実行してみましょう
ソーラー「そのいい方法とは・・・
とりあえず
オブジェクト
cube[0]
のメンバ関数
cube[0].display()
オブジェクト
cube[1]
のメンバ関数
cube[1].display()
オブジェクト
cube[2]
のメンバ関数
cube[2].display()
に相当するものを実行するためには
ptaのクラスCube*(アスタリスク)型のポインタ変数宣言
Cube* pta;
ptbのクラスCube*(アスタリスク)型のポインタ変数宣言
Cube* ptb;
ptcのクラスCube*(アスタリスク)型のポインタ変数宣言
Cube* ptc;
を行い
クラスCube型の配列宣言
Cube cube[3];
によって作製された
オブジェクト
cube[0]
cube[1]
cube[2]
のアドレス
&cube[0]
&cube[1]
&cube[2]
を
それぞれ
クラスCube*(アスタリスク)型のポインタ変数
pta
ptb
ptc
に代入します
そうすると
クラスCube*(アスタリスク)型のポインタ変数
pta
ptb
ptc
にアロー演算子を用いた
pta->display();
ptb->display();
ptc->display();
は
cube[0].display()
cube[1].display()
cube[2].display()
を表すことになります
☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆
Cube型のオブジェクト
cube[0]
のアドレス&cube[0]を格納するために
Cube*型のポインタ変数
pta
を作製しています。
先のエピソードでも学んだように
ptaにはオブジェクトcube[0]のアドレス
&cube[0]が代入されているので
pta->display()
は
cube[0].display()
をあらわすことになり
pta->display();
を実行するということは
オブジェクトcube[0]のメンバ関数display()に相当するものが実行されるというわけです。
実際に
そのことを示すプログラムはこちらになります😊」
👇
#include <iostream>
using namespace std;
class Cube{
public:
int no;
public:
float tate;
public:
float yoko;
public:
float takasa;
public:
Cube();
//🌞🌞🌞コンストラクタCube()のメンバ関数宣言を行っています🌞🌞🌞
public:
Cube(int a, float b, float c, float d);
/*🌞🌞🌞コンストラクタCube(int a,float b,float c,float d)のメンバ関数宣言を行っています🌞🌞🌞*/
public:
void display(); //自作関数display()はクラスCubeのメンバ関数とよばれます
};
Cube::Cube() {
no = 0;
tate = 0.0;
yoko = 0.0;
takasa = 0.0;
cout << "生成されたオブジェクトのメンバ変数を初期化しました" << "\n";
}
//👆🌞🌞🌞コンストラクタCube()の定義を行っています🌞🌞🌞
Cube::Cube(int a, float b, float c, float d) {
no = a;
tate = b;
yoko = c;
takasa = d;
cout << "生成されたオブジェクトのメンバ変数を初期化しました" << "\n";
}
/*👆🌞🌞🌞コンストラクタCube(int a,float b,float c,float d)の定義を行っています🌞🌞🌞*/
void Cube::display() {
cout << "立方体につけられたナンバーは" << no << "です" << "\n";
cout << "立方体の縦の長さは" << tate << "です" << "\n";
cout << "立方体の横の長さは" << yoko << "です" << "\n";
cout << "立方体の高さの長さは" << takasa << "です" << "\n";
}
//👆クラスCubeのメンバ関数となっている自作関数display()の定義をおこなっています
int main() {
Cube cube[3];
/*🌞🌞🌞配列をつかってクラスCube型のオブジェクト
cube[0]
cube[1]
cube[2]
を作製しています🌞🌞🌞*/
Cube* pta;
Cube* ptb;
Cube* ptc;
/*🌞🌞🌞Cube型のオブジェクト
cube[0]
cube[1]
cube[2]
のアドレスを格納するために
pta
ptb
ptc
の
Cube*型のポインタ変数宣言を実行しています。
🌞🌞🌞*/
pta = &cube[0];
ptb = &cube[1];
ptc = &cube[2];
pta->display();
ptb->display();
ptc->display();
/*👆💖💖💖💖💖💖💖💖💖ここに追加しました💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖*/
cout << "立方体につけられたナンバーは" << cube[0].no << "です" << "\n";
cout << "立方体の縦の長さは" << cube[0].tate << "です" << "\n";
cout << "立方体の横の長さは" << cube[0].yoko << "です" << "\n";
cout << "立方体の高さの長さは" << cube[0].takasa<< "です" << "\n";
cout << "立方体につけられたナンバーは" << cube[1].no << "です" << "\n";
cout << "立方体の縦の長さは" << cube[1].tate << "です" << "\n";
cout << "立方体の横の長さは" << cube[1].yoko<< "です" << "\n";
cout << "立方体の高さの長さは" << cube[1].takasa<< "です" << "\n";
cout << "立方体につけられたナンバーは" << cube[2].no << "です" << "\n";
cout << "立方体の縦の長さは" << cube[2].tate << "です" << "\n";
cout << "立方体の横の長さは" << cube[2].yoko << "です" << "\n";
cout << "立方体の高さの長さは" << cube[2].takasa << "です" << "\n";
return 0;
}
ビルド実行結果
生成されたオブジェクトのメンバ変数を初期化しました
生成されたオブジェクトのメンバ変数を初期化しました
生成されたオブジェクトのメンバ変数を初期化しました
立方体につけられたナンバーは0です
立方体の縦の長さは0です
立方体の横の長さは0です
立方体の高さの長さは0です
立方体につけられたナンバーは0です
立方体の縦の長さは0です
立方体の横の長さは0です
立方体の高さの長さは0です
立方体につけられたナンバーは0です
立方体の縦の長さは0です
立方体の横の長さは0です
立方体の高さの長さは0です
立方体につけられたナンバーは0です
立方体の縦の長さは0です
立方体の横の長さは0です
立方体の高さの長さは0です
立方体につけられたナンバーは0です
立方体の縦の長さは0です
立方体の横の長さは0です
立方体の高さの長さは0です
立方体につけられたナンバーは0です
立方体の縦の長さは0です
立方体の横の長さは0です
立方体の高さの長さは0です
ソーラー「やったね(^_-)-☆ビルド実行成功!」
マックス「オブジェクトcube[0]のメンバ関数
cube[0].display();
に相当するものを実行するために
クラスCube*型のポインタ変数ptaに
pta = &cube[0];
と
オブジェクトcube[0]のアドレスを代入するのか・・・・・
おれは
それ以外にいい方法を
おもいついたぞ
ソーラーよ。」
ソーラー「??クラスCube*型のポインタ変数ptaに
pta = &cube[0];
と
オブジェクトcube[0]のアドレス&cube[0]を代入する
以外の方法ですか??」
マックス「それはなあ
int型の配列宣言
int hairetu[3];
を行った場合
生成される
配列変数
hairetu[0]
hairetu[1]
hairetu[2]
のアドレスは
&hairetu[0]
&hairetu[1]
&hairetu[2]
とあらわすこともできるが
配列変数
hairetu[0]
hairetu[1]
hairetu[2]
のアドレスを格納したポインタ変数は
hairetu
hairetu+1
hairetu+2
とあらわされるだろう。
同様に
クラスCubeの配列宣言
Cube cube[3];
を実行した場合
生成されるオブジェクト
cube[0]
cube[1]
cube[2]
のアドレスは
&cube[0]
&cube[1]
&cube[2]
とあらわされるが
オブジェクト
cube[0]
cube[1]
cube[2]
のアドレスを格納したポインタ変数は
cube
cube+1
cube+2
とあらわされるんじゃないか?
となると
クラスCube*型のポインタ変数
pta
ptb
ptc
に
pta = &cube[0];
ptb = &cube[0];
ptc = &cube[0];
と
オブジェクトcube[0]のアドレス
オブジェクトcube[1]のアドレス
オブジェクトcube[2]のアドレス
を代入しなくても
クラスCube*型のポインタ変数ptaに
pta =cube;
pta =(cube+1);
pta =(cube+2);
と
オブジェクトcube[0]のアドレスを格納したポインタ変数cube
オブジェクトcube[1]のアドレスを格納したポインタ変数cube+1
オブジェクトcube[2]のアドレスを格納したポインタ変数cube+2
を
代入することにより
オブジェクトcube[0]のアドレス
オブジェクトcube[1]のアドレス
オブジェクトcube[2]のアドレス
を
Cube*(アスタリスク)型のポインタ変数pta
Cube*(アスタリスク)型のポインタ変数ptb
Cube*(アスタリスク)型のポインタ変数ptc
に代入することができるんじゃないか?」
ソーラー「そうですね。
先ほどのプログラムの
pta = &cube[0];
ptb = &cube[0];
ptc = &cube[0];
を
pta =cube;
pta =(cube+1);
pta =(cube+2);
に変更して
実行してみましょう。」
マックス「ははは これでいけるか 楽しみじゃないか」
ソーラー「それでは
pta = &cube[0];
ptb = &cube[0];
ptc = &cube[0];
を
pta =cube;
pta =(cube+1);
pta =(cube+2);
に変更したプログラムをっ
ビルドっ」
#include <iostream>
using namespace std;
class Cube{
public:
int no;
public:
float tate;
public:
float yoko;
public:
float takasa;
public:
Cube();
//🌞🌞🌞コンストラクタCube()のメンバ関数宣言を行っています🌞🌞🌞
public:
Cube(int a, float b, float c, float d);
/*🌞🌞🌞コンストラクタCube(int a,float b,float c,float d)のメンバ関数宣言を行っています🌞🌞🌞*/
public:
void display(); //自作関数display()はクラスCubeのメンバ関数とよばれます
};
Cube::Cube() {
no = 0;
tate = 0.0;
yoko = 0.0;
takasa = 0.0;
cout << "生成されたオブジェクトのメンバ変数を初期化しました" << "\n";
}
//👆🌞🌞🌞コンストラクタCube()の定義を行っています🌞🌞🌞
Cube::Cube(int a, float b, float c, float d) {
no = a;
tate = b;
yoko = c;
takasa = d;
cout << "生成されたオブジェクトのメンバ変数を初期化しました" << "\n";
}
/*👆🌞🌞🌞コンストラクタCube(int a,float b,float c,float d)の定義を行っています🌞🌞🌞*/
void Cube::display() {
cout << "立方体につけられたナンバーは" << no << "です" << "\n";
cout << "立方体の縦の長さは" << tate << "です" << "\n";
cout << "立方体の横の長さは" << yoko << "です" << "\n";
cout << "立方体の高さの長さは" << takasa << "です" << "\n";
}
//👆クラスCubeのメンバ関数となっている自作関数display()の定義をおこなっています
int main() {
Cube cube[3];
/*🌞🌞🌞配列をつかってクラスCube型のオブジェクト
cube[0]
cube[1]
cube[2]
を作製しています🌞🌞🌞*/
Cube* pta;
Cube* ptb;
Cube* ptc;
/*🌞🌞🌞Cube型のオブジェクト
cube[0]
cube[1]
cube[2]
のアドレスを格納するために
pta
ptb
ptc
の
Cube*型のポインタ変数宣言を実行しています。
🌞🌞🌞*/
pta = cube;
ptb = (cube+1);
ptc = (cube+2);
pta->display();
ptb->display();
ptc->display();
/*👆💖💖💖💖💖💖💖💖💖ここに追加しました💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖*/
cout << "立方体につけられたナンバーは" << cube[0].no << "です" << "\n";
cout << "立方体の縦の長さは" << cube[0].tate << "です" << "\n";
cout << "立方体の横の長さは" << cube[0].yoko << "です" << "\n";
cout << "立方体の高さの長さは" << cube[0].takasa << "です" << "\n";
cout << "立方体につけられたナンバーは" << cube[1].no << "です" << "\n";
cout << "立方体の縦の長さは" << cube[1].tate << "です" << "\n";
cout << "立方体の横の長さは" << cube[1].yoko << "です" << "\n";
cout << "立方体の高さの長さは" << cube[1].takasa << "です" << "\n";
cout << "立方体につけられたナンバーは" << cube[2].no << "です" << "\n";
cout << "立方体の縦の長さは" << cube[2].tate << "です" << "\n";
cout << "立方体の横の長さは" << cube[2].yoko << "です" << "\n";
cout << "立方体の高さの長さは" << cube[2].takasa << "です" << "\n";
return 0;
}
ビルド実行結果
生成されたオブジェクトのメンバ変数を初期化しました
生成されたオブジェクトのメンバ変数を初期化しました
生成されたオブジェクトのメンバ変数を初期化しました
立方体につけられたナンバーは0です
立方体の縦の長さは0です
立方体の横の長さは0です
立方体の高さの長さは0です
立方体につけられたナンバーは0です
立方体の縦の長さは0です
立方体の横の長さは0です
立方体の高さの長さは0です
立方体につけられたナンバーは0です
立方体の縦の長さは0です
立方体の横の長さは0です
立方体の高さの長さは0です
立方体につけられたナンバーは0です
立方体の縦の長さは0です
立方体の横の長さは0です
立方体の高さの長さは0です
立方体につけられたナンバーは0です
立方体の縦の長さは0です
立方体の横の長さは0です
立方体の高さの長さは0です
立方体につけられたナンバーは0です
立方体の縦の長さは0です
立方体の横の長さは0です
立方体の高さの長さは0です
マックス「にゃはは やはり
成功か!
cube
cube+1
cube+2
は
cube[0]
cube[1]
cube[2]
のアドレス
&cube[0]
&cube[1]
&cube[2]
を
格納するポインタ変数になるというわけだ!
ふっ
決まったな」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます