クラスの鑑賞会を実施しています その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「自然とどんどん理解が深まっていきますね」










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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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