クラスのメンバ変数宣言のアクセス指定子がprivateでもメンバ関数宣言がpublicなら オブジェクトのメンバ関数の実行を通してオブジェクトのメンバ変数に格納されている数値を変更することができます。



#include <iostream>


using namespace std;


class Cube{


public:

int no;

float tate;

float yoko;

float takasa;

void display(int a, float b, float c, float d);


};

void Cube::display(int a, float b, float c, float d) {


no = a;

tate = b;

yoko = c;

takasa = d;


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

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

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

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


}


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


/*🌞🌞🌞ここでの注目ポイントはクラスCubeのメンバ関数displayの定義で


no = a;

tate = b;

yoko = c;

takasa = d;


が実行されていることです


Cube cube1;


の実行により


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


cube1.no

cube1.tate

cube1.yoko

cube1.takasa


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

cube1.display(int a, float b, float c, float d)

が作製されます


クラスCubeのメンバ関数displayの引数となっている


int a

float b

float c

float d

5

6.0

7.0

8.0

が代入された


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


cube1.display(5,6.0,7.0,8.0);


が実行されると


no = a;

tate = b;

yoko = c;

takasa = d;

が実行されることになり


no

tate

yoko

takasa

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

cube1.no

cube1.tate

cube1.yoko

cube1.takasa

を表しているので


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

cube1.no

cube1.tate

cube1.yoko

cube1.takasa

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

変数

a

b

c

d

に格納されている数値

5

6.0

7.0

8.0

に変更されることになります。

🌞🌞🌞*/



int main() {


Cube cube1;


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


cube1.no = 1;

cube1.tate = 2.0;

cube1.yoko = 3.0;

cube1.takasa = 4.0;


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

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

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

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




cube1.display(5,6.0,7.0,8.0);


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

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

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

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


return 0;

}


ビルド実行結果


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

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

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

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

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

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

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

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

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

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

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

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



マックス「上記のプログラムでは


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

cube1.no

cube1.tate

cube1.yoko

cube1.takasa

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


1

2.0

3.0

4.0


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

cube1.no

cube1.tate

cube1.yoko

cube1.takasa



               直接


数値データ


5

6.0

7.0

8.0



cube1.no=5;

cube1.tate=6.0;

cube1.yoko =7.0;

cube1.takasa=8.0;



代入することなく


cube1.display(5,6.0,7.0,8.0);


を実行して


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

cube1.no

cube1.tate

cube1.yoko

cube1.takasa

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


1

2.0

3.0

4.0

から

5

6.0

7.0

8.0


に変更できたんだ


いい・・・


新しい技をおぼえたな(*´▽`*)」


ソーラー「そう😊


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


cube1.no

cube1.tate

cube1.yoko

cube1.takasa



直接


数値データを代入する


cube1.no=5;

cube1.tate=6.0;

cube1.yoko=7.0;

cube1.takasa=8.0;


と記述されている部分はみあたらないけど


cube1.display(5,6.0,7.0,8.0);


の実行によって


クラスCubeのメンバ関数の定義

👇

void Cube::display(int a, float b, float c, float d) {


no = a;

tate = b;

yoko = c;

takasa = d;


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

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

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

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


}



a

b

c

d

5

6.0

7.0

8.0


no

tate

yoko

takasa


cube1.no;

cube1.tate

cube1.yoko

cube1.takasa


が代入された

👇

cube1.no=5;

cube1.tate=6.0;

cube1.yoko=7.0;

cube1.takasa=8.0;


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

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

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

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

👆

が実行されることになるので


ビルド実行結果は


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

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

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

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


となっているんだね。」


マックス「ということは


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


cube1.no

cube1.tate

cube1.yoko

cube1.takasa


直接


数値データ

5

6.0

7.0

8.0


cube1.no=5;

cube1.tate=6.0;

cube1.yoko=7.0;

cube1.takasa=8.0;



代入しなくても


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


cube1.display(5,6.0,7.0,8.0);


を実行すれば


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


cube1.no

cube1.tate

cube1.yoko

cube1.takasa

数値データ

5

6.0

7.0

8.0


を代入できるわけだ。


ということはだ・・・」


ぶーにゃん「にゃ~ん」


てんC「ぶーにゃんさん、かわいい」



ニャンコ🐈とてんCが戯れている。


ぶーにゃん「にゃ~ん」


マックス「おおっひらめいた🌞



となるとだ・・・



Cubeのクラス宣言とメンバ関数displayの定義

👇


class Cube{


public:

int no;

float tate;

float yoko;

float takasa;

void display(int a, float b, float c, float d);


};

void Cube::display(int a, float b, float c, float d) {


no = a;

tate = b;

yoko = c;

takasa = d;


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

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

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

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


}



メンバ変数宣言

int no;

float tate;

float yoko;

float takasa;


に設定されている


アクセス指定子をpublicからprivateに変更するとするだろう。


そのとき


メンバ関数宣言

void display(int a, float b, float c, float d);

に設定されている


アクセス指定子はpublicのままにしておくことにする。


となると


Cubeのクラス宣言とメンバ関数displayの定義は

👇


class Cube{


private:

int no;

float tate;

float yoko;

float takasa;

public:

void display(int a, float b, float c, float d);


};

void Cube::display(int a, float b, float c, float d) {


no = a;

tate = b;

yoko = c;

takasa = d;


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

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

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

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


}


になる


すると


main関数内で


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


Cube cube1;


をおこなって


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


cube1.no

cube1.tate

cube1.yoko

cube1.takasa


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


cube1.display(int a, float b, float c, float d)


を作製したとしても


メンバ変数宣言

int no;

float tate;

float yoko;

float takasa;


に設定されている


アクセス指定子はpublicからprivateになっているため


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


cube1.no

cube1.tate

cube1.yoko

cube1.takasa


を使用することはできない

そう思うだろう?」


てんC「そうですね」


マックス「だが



メンバ関数宣言

void display(int a, float b, float c, float d);

に設定されている


アクセス指定子はpublicなので


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


cube1.display(int a, float b, float c, float d)


は使用できることになる


このとき


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


cube1.no

cube1.tate

cube1.yoko

cube1.takasa


を使用することはできないので


main関数内で


cube1.no=5;

cube1.tate=6.0;

cube1.yoko=7.0;

cube1.takasa=8.0;


のような命令文を実行すると


ビルドエラーが表示されるはずだ


そう思うだろう?


なあ ソーラーよ😊」


ソーラー「そうですね。


メンバ変数宣言

int no;

float tate;

float yoko;

float takasa;


に設定されている


アクセス指定子がprivateになっているので


Cube cube1;


を実行して


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


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


に直接


数値データを代入することはできなくなっているわけです。」



マックス「だが(*^▽^*)だ。


Cubeのクラス宣言内の


メンバ変数宣言

int no;

float tate;

float yoko;

float takasa;


に設定されている


アクセス指定子がprivateになっていて


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


cube1.no

cube1.tate

cube1.yoko

cube1.takasa


を使用することができなくても


メンバ関数宣言

void display(int a, float b, float c, float d);


に設定されている


アクセス指定子はpublicなので



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


       💖cube1.display(5,6.0,7.0,8.0);💖


      は実行することができるんじゃないかぁ


な(^_-)-☆」


ソーラー「な、ナイスアイデア!」


てんC「その可能性はあります」


マックス「そう思うだろう

       

cube1.display(5,6.0,7.0,8.0);


が実行できるなら


クラスCubeのメンバ関数displayの定義

👇

void Cube::display(int a, int b, int c, int d) {


no = a;

tate = b;

yoko = c;

takasa = d;


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

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

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

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


}

👆



no = a;

tate = b;

yoko = c;

takasa = d;


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

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

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

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


が実行される


このとき


クラスCubeのメンバ変数


no

tate

yoko

takasa



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


cube1.no

cube1.tate

cube1.yoko

cube1.takasa


をあらわすことになっていたので

👇

cube1.no = a;

cube1.tate = b;

cube1.yoko = c;

cube1.takasa = d;


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

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

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

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

👆

が実行されるはずだよん


int a

float b

float c

float d


には


5

6.0

7.0

8.0

が代入されているので



ビルド結果


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

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

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

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


が表示されるってことになるんじゃないか(*^▽^*)


どうだ?


まあ


クラスCubeのメンバ変数宣言

int no;

float tate;

float yoko;

float takasa;


に設定されている


アクセス指定子privateの働きにより


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


cube1.no

cube1.tate

cube1.yoko

cube1.takasa


は使用できないので


メンバ関数宣言

void display(int a, float b, float c, float d);

のアクセス指定子

publicになっていたとしても


cube1.display(5,6.0,7.0,8.0);


は実行できないかもしれないが・・・


だって


cube1.no = a;

cube1.tate = b;

cube1.yoko = c;

cube1.takasa = d;


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

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

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

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

👆

が実行されるんだったら


          直接ではないが間接的に


cube1.no

cube1.tate

cube1.yoko

cube1.takasa


を使用していることになるからな




ソーラー「なるほど


クラスCubeのメンバ変数宣言

int no;

float tate;

float yoko;

float takasa;


に設定されているアクセス指定子が


         💖private💖



クラスCubeのメンバ関数宣言

void display(int a, float b, float c, float d);


のアクセス指定子が


         💖public💖


の場合


cube1.display(5,6.0,7.0,8.0);


 

実行できる(´▽`*)?


実行できない( ^ω^)・・・?


どっちなのかな?」


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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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