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

つづきです



マックス「そう


Cubeのクラス宣言内の


メンバ変数宣言

int no;

float tate;

float yoko;

float takasa;


に設定されている


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


メンバ関数宣言

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

に設定されている


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


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


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


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


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


}


a

b

c

d

5

6.0

7.0

8.0


が代入され


no

tate

yoko

takasa



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

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です


が表示されるはずじゃないか(*^▽^*)


つまり


メンバ変数宣言

int no;

float tate;

float yoko;

float takasa;


に設定されている


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


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


cube1.no

cube1.tate

cube1.yoko

cube1.takasa


を使用することができず


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


代入できるんじゃないか?


それとも


やはり


メンバ変数宣言

int no;

float tate;

float yoko;

float takasa;


に設定されている


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


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


cube1.no

cube1.tate

cube1.yoko

cube1.takasa


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


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


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


を実行しても


no

tate

yoko

takasa


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


cube1.no

cube1.tate

cube1.yoko

cube1.takasa


が代入されるようなことはおこらず


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


cube1.no

cube1.tate

cube1.yoko

cube1.takasa



間接的に


数値データ

5

6.0

7.0

8.0


代入することはできないのか?」


ソーラー「そうですね・・・


面白くなってきたね


それでは


        いよいよ


Cubeのクラス宣言内の


メンバ変数宣言

int no;

float tate;

float yoko;

float takasa;


に設定されている


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



メンバ関数宣言

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


に設定されている


アクセス指定子がpublicならば


main関数内で


オブジェクト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


代入できるかどうか


プログラムを実行して確かめてみたいとおもいます」


そのプログラムはこちらです

👇


#include <iostream>


using namespace std;


class Cube {


private:

int no;

private:

float tate;

private:

float yoko;

private:

float takasa;

public://🌞ここに注目 アクセス指定子が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";


}


int main() {


Cube cube1;


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

return 0;


}



ビルド実行結果


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

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

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

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



ソーラー「クラスのメンバ関数


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


}


となっています。


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


が実行されると


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


が代入されているのがわかりますね。



つまり



 Cubeのクラス宣言内の


メンバ変数宣言


int no;

float tate;

float yoko;

float takasa;


に設定されている


アクセス指定子がprivateになっていることにより


main関数内で


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


cube1.no

cube1.tate

cube1.yoko

cube1.takasa


を直接使用できないとしても


メンバ関数宣言

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


に設定されている


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


main関数内で


オブジェクト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


代入することができるのですね😊」


マックス「念を押して


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


cube1.no

cube1.tate

cube1.yoko

cube1.takasa



数値データ


5

6.0

7.0

8.0


代入することができているかどうか


main関数内で


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



付け加えて実行して確かめてみたらいいんじゃないか?」


ソーラー「それは いいアイデアですね。


今のプログラムの


main関数内で


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


付け加えてみましょう。


そのプログラムはこちらです

👇


#include <iostream>


using namespace std;


class Cube {


private:

int no;

private:

float tate;

private:

float yoko;

private:

float takasa;

public://🌞ここに注目 アクセス指定子が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";


}


int main() {


Cube cube1;


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;


}



ビルド実行結果



エラー (アクティブ) E0265 メンバー "Cube::yoko" (宣言された 行 12) にアクセスできません

エラー (アクティブ) E0265 メンバー "Cube::tate" (宣言された 行 10) にアクセスできません

エラー (アクティブ) E0265 メンバー "Cube::takasa" (宣言された 行 14) にアクセスできません

エラー (アクティブ) E0265 メンバー "Cube::no" (宣言された 行 8) にアクセスできません

エラー (アクティブ) E0006 ファイルの末尾でコメントが閉じられていません 7

警告 C4244 '引数': 'double' から 'int' への変換です。データが失われる可能性があります。

エラー C2248 'Cube::yoko': private メンバー (クラス 'Cube' で宣言されている) にアクセスできません。

エラー C2248 'Cube::tate': private メンバー (クラス 'Cube' で宣言されている) にアクセスできません。

エラー C2248 'Cube::takasa': private メンバー (クラス 'Cube' で宣言されている) にアクセスできません。

エラー C2248 'Cube::no': private メンバー (クラス 'Cube' で宣言されている) にアクセスできません。

警告 C4244 '=': 'int' から 'float' への変換です。データが失われる可能性があります。

警告 C4244 '=': 'int' から 'float' への変換です。データが失われる可能性があります。

警告 C4244 '=': 'int' から 'float' への変換です。データが失われる可能性があります。


ソーラー「ビルド実行できないね。


Cubeのクラス宣言内の


メンバ変数宣言

int no;

float tate;

float yoko;

float takasa;


に設定されている


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


main関数内で


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


cube1.no

cube1.tate

cube1.yoko

cube1.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";



付け加えて


実行しようとすると


ビルドエラーが表示されるんだね。」


マックス「ふ~むぅ


Cubeのクラス宣言内の


メンバ変数宣言

int no;

float tate;

float yoko;

float takasa;


のアクセス指定子が


privateに設定されていると


cube1.no

cube1.tate

cube1.yoko

cube1.takasa


を使用することができなくなる・・・か・・・


となると


main関数内で


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


cube1.no

cube1.tate

cube1.yoko

cube1.takasa


に直接


cube1.no=10000;

cube1.tate=10000;

cube1.yoko=10000;

cube1.takasa=10000;


のように数値データを代入することはできないし


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


cube1.no

cube1.tate

cube1.yoko

cube1.takasa


格納されている数値データを利用したいとおもって


別の変数


e

f

g

h


cube1.no

cube1.tate

cube1.yoko

cube1.takasa

を代入する


e=cube1.no;

f=cube1.tate;

g=cube1.yoko;

h=cube1.takasa;


実行するようなこともできないってわけだ


となると


Cubeのクラス宣言内の


メンバ変数宣言

int no;

float tate;

float yoko;

float takasa;


のアクセス指定子が


privateに設定されていると


意外と不便じゃないか?」

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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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