クラスの鑑賞会を実施しています その3 オブジェクトのメンバ変数と普通の変数は異なる変数です
🌞まだまだ クラスの鑑賞会は続いていきます🌞
#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";
}
//👆クラスCubeのメンバ関数となっている自作関数display()の定義をおこなっています
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です
マックス「
cube1.no = 1;
cube1.tate = 2.0;
cube1.yoko = 3.0;
cube1.takasa = 4.0;
cube1.display();
を実行すると
クラスCubeのメンバ関数display()の定義
void Cube::display() {
cout << "立方体につけられたナンバーは" << no << "です" << "\n";
cout << "立方体の縦の長さは" << tate << "です" << "\n";
cout << "立方体の横の長さは" << yoko << "です" << "\n";
cout << "立方体の高さの長さは" << takasa << "です" << "\n";
}
の
変数
no
tate
yoko
takasa
に
オブジェクト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のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
には
cube1.no = 1;
cube1.tate = 2.0;
cube1.yoko = 3.0;
cube1.takasa = 4.0;
と数値データが代入されているので
ビルド実行結果
立方体につけられたナンバーは1です
立方体の縦の長さは2です
立方体の横の長さは3です
立方体の高さの長さは4です
が
表示される。
なるほどお
変数
no
tate
yoko
takasa
に
オブジェクトcube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
が
が代入されるか・・・・・
ていうか・・・
もし
main関数内で
cube1.no = 1;
cube1.tate = 2.0;
cube1.yoko = 3.0;
cube1.takasa = 4.0;
を実行せず
main関数内で
int no = 1;
float tate = 2.0;
float yoko = 3.0;
float takasa = 4.0;
を実行したら
cube1.display();
を実行する際
クラスCubeのメンバ関数display()の定義
void Cube::display() {
cout << "立方体につけられたナンバーは" << no << "です" << "\n";
cout << "立方体の縦の長さは" << tate << "です" << "\n";
cout << "立方体の横の長さは" << yoko << "です" << "\n";
cout << "立方体の高さの長さは" << takasa << "です" << "\n";
}
の
変数
no
tate
yoko
takasa
に
1
2.0
3.0
4,0
が代入され
ビルド実行結果
立方体につけられたナンバーは1です
立方体の縦の長さは2です
立方体の横の長さは3です
立方体の高さの長さは4です
が表示されるってことはあるのか?
どう思う?どう思う?」
ソーラー「はは~ん
cube1.display();
が実行されると
クラスCubeのメンバ関数display()の定義
void Cube::display() {
cout << "立方体につけられたナンバーは" << no << "です" << "\n";
cout << "立方体の縦の長さは" << tate << "です" << "\n";
cout << "立方体の横の長さは" << yoko << "です" << "\n";
cout << "立方体の高さの長さは" << takasa << "です" << "\n";
}
の
変数
no
tate
yoko
takasa
に
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
が代入されたものが実行されることになるよね
だから
main関数内で
変数宣言、初期化
int no = 1;
float tate = 2.0;
float yoko = 3.0;
float takasa = 4.0;
を実行していても
main関数内で
cube1.no = 1;
cube1.tate = 2.0;
cube1.yoko = 3.0;
cube1.takasa = 4.0;
を実行しなければ
この変数
no
tate
yoko
takasa
は
もちろん
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
ではないので
だから
cube1.display();
が実行されると
クラスCubeのメンバ関数display()の定義
void Cube::display() {
cout << "立方体につけられたナンバーは" << no << "です" << "\n";
cout << "立方体の縦の長さは" << tate << "です" << "\n";
cout << "立方体の横の長さは" << yoko << "です" << "\n";
cout << "立方体の高さの長さは" << takasa << "です" << "\n";
}
の
変数
no
tate
yoko
takasa
に
何も代入されないものが実行されることになるはずだね
ともかく
そのプログラムを実行してみましょう。
👇
#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";
}
//👆クラスCubeのメンバ関数となっている自作関数display()の定義をおこなっています
int main() {
Cube cube1;
//👆cube1のクラスCube型のオブジェクト宣言をおこなっています
no = 1;
tate = 2.0;
yoko = 3.0;
takasa = 4.0;
cube1.display();
return 0;
}
ビルド実行結果
エラー (アクティブ) E0020 識別子 "yoko" が定義されていません
エラー (アクティブ) E0020 識別子 "tate" が定義されていません
エラー (アクティブ) E0020 識別子 "takasa" が定義されていません
エラー (アクティブ) E0020 識別子 "no" が定義されていません
エラー C2065 'yoko': 定義されていない識別子です。
エラー C2065 'tate': 定義されていない識別子です。
エラー C2065 'takasa': 定義されていない識別子です。
エラー C2065 'no': 定義されていない識別子です。
てんC「あっ ソーラーさん
int no = 1;
float tate = 2.0;
float yoko = 3.0;
float takasa = 4.0;
と記述するところが
no = 1;
tate = 2.0;
yoko = 3.0;
takasa = 4.0;
と記述されています
ですので
変数
no
tate
yoko
takasa
が定義されていないとエラー表示されています。
ところで
最初のプログラム
👇
#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";
}
//👆クラスCubeのメンバ関数となっている自作関数display()の定義をおこなっています
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です
👆を
ビルド実行できたということは
当然ですが
cube1.no = 1;
cube1.tate = 2.0;
cube1.yoko = 3.0;
cube1.takasa = 4.0;
が実行されたということになります。
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
も数値データを代入することができる変数には違いないので
オブジェクトcube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
の変数宣言が
main関数内のどこかで実行されているはずですが
みあたりませんね。
ソーラーさん😊」
かっぽぉ~ん~~~~~~~~
ソーラー「オブジェクトcube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
の変数宣言を実行しているのが
今のプログラムのmain関数内のこの部分
👇
Cube cube1;
//👆cube1のクラスCube型のオブジェクト宣言をおこなっています
cube1.no = 1;
cube1.tate = 2.0;
cube1.yoko = 3.0;
cube1.takasa = 4.0;
の
🌞Cube cube1;🌞
じゃないかな
Cube cube1;
が実行されていることにより
クラスCube型のオブジェクトcube1
が作製されています
クラスCube型のオブジェクトcube1
が作製されると
🍋自動的に🍋
オブジェクトcube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
が
作製される。
つまり
オブジェクトcube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
の変数宣言がおこなわれたことになるわけで
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
の変数宣言自体を実行する必要はないってわけだね😊」
マックス「全然関係ないが・・・
さっきのプログラムで
main関数内で
cube1.no = 1;
cube1.tate = 2.0;
cube1.yoko = 3.0;
cube1.takasa = 4.0;
の代わりに
no = 1;
tate = 2.0;
yoko = 3.0;
takasa = 4.0;
を実行したら
変数
no
tate
yoko
takasa
は
定義されていないとビルドエラーが表示されたんだろう。
なら
no = 1;
tate = 2.0;
yoko = 3.0;
takasa = 4.0;
でなく
変数宣言
int no = 1;
float tate = 2.0;
float yoko = 3.0;
float takasa = 4.0;
を実行したら
変数
no
tate
yoko
takasa
は
定義されていることになり
ビルドエラーは表示されないんじゃないか?」
ソーラー「そうですね。
それも やってみましょう。
そのプログラムはこちらです
👇
#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";
}
//👆クラスCubeのメンバ関数となっている自作関数display()の定義をおこなっています
int main() {
Cube cube1;
//👆cube1のクラスCube型のオブジェクト宣言をおこなっています
int no = 1;//👈ここに注目
float tate = 2.0;//👈ここに注目
float yoko = 3.0;//👈ここに注目
float takasa = 4.0;//👈ここに注目
cube1.display();
return 0;
}
ソーラー「それではっ ビルドっ」
画面にコマンドプロンプト画面が表示されます
ビルド実行中・・・・・
マックス「おお!なんかプログラムが実行できているぞ!
やってみるもんじゃないか」
ビルド実行結果
立方体につけられたナンバーは-858993460です
立方体の縦の長さは-1.07374e+08です
立方体の横の長さは-1.07374e+08です
立方体の高さの長さは-1.07374e+08です
マックス「あつ やば な、なんか
表示がバグった」
てんC「このプログラムでは
cube1のCube型のオブジェクト宣言
Cube cube1;
を実行し
オブジェクトcube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
オブジェクトcube1のメンバ関数
cube1.display()
が生成されています
そして
int no = 1;//👈ここに注目
float tate = 2.0;//👈ここに注目
float yoko = 3.0;//👈ここに注目
float takasa = 4.0;//👈ここに注目
を実行したのち
cube1.display();
を実行しています。
つまり
クラスCubeのメンバ関数display()の定義
void Cube::display() {
cout << "立方体につけられたナンバーは" << no << "です" << "\n";
cout << "立方体の縦の長さは" << tate << "です" << "\n";
cout << "立方体の横の長さは" << yoko << "です" << "\n";
cout << "立方体の高さの長さは" << takasa << "です" << "\n";
}
の中の
変数
no
tate
yoko
takasa
に
オブジェクト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のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
は初期化されていないので
オブジェクトcube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
には
ある数値データが保存されています。
今のプログラムでは
オブジェクトcube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
に数値データを代入して初期化をおこなわなかったため
オブジェクトcube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
には
初期化前に保存されていた数値データ
-858993460
-1.07374e+08
-1.07374e+08
-1.07374e+08
が
そのまま保存されていました
その状態で
cube1.display();
を実行すると
クラスCubeのメンバ関数display()の定義
👇
void Cube::display() {
cout << "立方体につけられたナンバーは" << no << "です" << "\n";
cout << "立方体の縦の長さは" << tate << "です" << "\n";
cout << "立方体の横の長さは" << yoko << "です" << "\n";
cout << "立方体の高さの長さは" << takasa << "です" << "\n";
}
の
no
tate
yoko
takasa
に
オブジェクト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のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
には
数値データ
-858993460
-1.07374e+08
-1.07374e+08
-1.07374e+08
が代入されていたので
ビルド実行結果
立方体につけられたナンバーは-858993460です
立方体の縦の長さは-1.07374e+08です
立方体の横の長さは-1.07374e+08です
立方体の高さの長さは-1.07374e+08です
が表示されたというわけです
というわけで
cube1.display();
の実行時
クラスCubeのメンバ関数display()の定義
void Cube::display() {
cout << "立方体につけられたナンバーは" << no << "です" << "\n";
cout << "立方体の縦の長さは" << tate << "です" << "\n";
cout << "立方体の横の長さは" << yoko << "です" << "\n";
cout << "立方体の高さの長さは" << takasa << "です" << "\n";
}
の中の
変数
no
tate
yoko
takasa
は
cube1.display();
の実行時
オブジェクトcube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
を
あらわすことになるので
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
を
初期化するには
no
tate
toko
takasa
に数値データ
1
2.0
3.0
4.0
を代入する
int no = 1;
float tate = 2.0;
float yoko = 3.0;
float takasa = 4.0;
ではなく
cube1.no =1
cube1.tate=2.0;
cube1.yoko =3.0;
cube1.takasa =4.0;
を実行しなければならないというわけです。」
マックス「鑑賞会 なんか 面白いな
なんでもしゃべれるのがいいな~」
solarplexuss「みんな この 最中も召し上がれ」
マックス「おおっ すまないな 」
ソーラー「いろいろお話しできてうれしいな」
てんC「自然とどんどん理解が深まっていきますね」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます