🌻天国にいけるC++言語入門🌻 進化し続けるオブジェクト指向プログラミング ver3.2307
アクセス指定子がpublicとprivateではどのようにプログラムの実行結果が異なってくるのでしょうか
アクセス指定子がpublicとprivateではどのようにプログラムの実行結果が異なってくるのでしょうか
ソーラー「
まずは次のプログラムをご覧ください
👇
#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です
☆ ☆ ☆ ☆ ☆ ☆ ☆
おさらいです
class Cube {
public: // 🌞アクセス指定子publicです
int no; //変数noはクラスCubeのメンバ変数とよばれます
float tate; //変数tateはクラスCubeのメンバ変数とよばれます
float yoko; //変数yokoはクラスCubeのメンバ変数とよばれます
float takasa; //変数takasaはクラスCubeのメンバ変数とよばれます
void display(); //自作関数display()はクラスCubeのメンバ関数とよばれます
};
は
class Cube {
public:
int no; //変数noはクラスCubeのメンバ変数とよばれます
public:
float tate; //変数tateはクラスCubeのメンバ変数とよばれます
public:
float yoko; //変数yokoはクラスCubeのメンバ変数とよばれます
public:
float takasa; //変数takasaはクラスCubeのメンバ変数とよばれます
public:
void display(); //自作関数display()はクラスCubeのメンバ関数とよばれます
};
と記述されていることに等しいです
solarplexussより
☆ ☆ ☆ ☆ ☆ ☆ ☆
ソーラー「さて みなさ~ん😊
🐤いよいよ🐤
🍰アクセス指定子について🍰
考察するときが来ました。
上記のプログラムの
public: //👈🌞ここに注目!!
と記述されている部分に御注目ください。
このpublicはアクセス指定子とよばれています。」
マックス「アクセス指定子?
?アクセスしたいのか?
なんで記述してあるんだ?
いらないんじゃ・・・」
ソーラー「そうなんです
最初は誰もそうおもいマッスル」
マックス「・・・すべっているぞ・・・」
ソーラー「では
ここでアクセス指定子を
publicからprivateにしてみます。
すると
プログラムは以下のようになります。
#include <iostream>
using namespace std;
class Cube {
private: // 🌞アクセス指定子をpublicからprivateに変更しました
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;
}
マックス「
publicからprivateにアクセス指定子が変わったというわけか・・・
地味じゃ~ん
publicの場合とprivateの場合で
なんか違いがあるのか?
」
ソーラー「あるんです
では このプログラムを実行してみます。
ビルドっと」
プログラムの実行結果
エラー (アクティブ) E0265 関数 "Cube::display" (宣言された 行 19) にアクセスできません
エラー (アクティブ) E0265 メンバー "Cube::yoko" (宣言された 行 12) にアクセスできません
エラー (アクティブ) E0265 メンバー "Cube::tate" (宣言された 行 11) にアクセスできません
エラー (アクティブ) E0265 メンバー "Cube::takasa" (宣言された 行 13) にアクセスできません
エラー (アクティブ) E0265 メンバー "Cube::no" (宣言された 行 10) にアクセスできません
エラー C2248 'Cube::yoko': private メンバー (クラス 'Cube' で宣言されている) にアクセスできません。
エラー C2248 'Cube::tate': private メンバー (クラス 'Cube' で宣言されている) にアクセスできません。
エラー C2248 'Cube::takasa': private メンバー (クラス 'Cube' で宣言されている) にアクセスできません
エラー C2248 'Cube::no': private メンバー (クラス 'Cube' で宣言されている) にアクセスできません。
エラー C2248 'Cube::display': private メンバー (クラス 'Cube' で宣言されている) にアクセスできません。
マックス「なんだ? いや~ん💖
なんで
プログラムの実行結果
立方体につけられたナンバーは1です
立方体の縦の長さは2です
立方体の横の長さは3です
立方体の高さの長さは4です
が表示されないんだ?」
てんC「クラス宣言内のアクセス指定子を
publicからprivateに変更したことが関係しているようですね。
いや~んですね。」
ぶーにゃん「にゃお~~ん」
ソーラー「そお~うなんです。
いや~んなんです。
クラス宣言
class Cube {
private: // 🌞アクセス演算子をpublicからprivateに変更しました
int no; //変数noはクラスCubeのメンバ変数とよばれます
float tate; //変数tateはクラスCubeのメンバ変数とよばれます
float yoko; //変数yokoはクラスCubeのメンバ変数とよばれます
float takasa; //変数takasaはクラスCubeのメンバ変数とよばれます
void display(); //自作関数display()はクラスCubeのメンバ関数とよばれます
};
をよく見てよ。
アクセス指定子privateは
private:
の以下の行の
メンバ変数宣言
int no;
float tate;
float yoko;
float takasa;
メンバ関数宣言
void display();
に作用しているんだ」
マックス「private:
の以下の行の
メンバ変数宣言
int no;
float tate;
float yoko;
float takasa;
メンバ関数宣言
void display();
全部にか・・・」
☆ ☆ ☆ ☆ ☆ ☆ ☆
class Cube {
private: // 🌞アクセス指定子をpublicからprivateに変更しました
int no; //変数noはクラスCubeのメンバ変数とよばれます
float tate; //変数tateはクラスCubeのメンバ変数とよばれます
float yoko; //変数yokoはクラスCubeのメンバ変数とよばれます
float takasa; //変数takasaはクラスCubeのメンバ変数とよばれます
void display(); //自作関数display()はクラスCubeのメンバ関数とよばれます
};
は
class Cube {
private:
int no; //変数noはクラスCubeのメンバ変数とよばれます
private:
float tate; //変数tateはクラスCubeのメンバ変数とよばれます
private:
float yoko; //変数yokoはクラスCubeのメンバ変数とよばれます
private:
float takasa; //変数takasaはクラスCubeのメンバ変数とよばれます
private:
void display(); //自作関数display()はクラスCubeのメンバ関数とよばれます
};
と記述されていることに等しいです
solarplexussより
☆ ☆ ☆ ☆ ☆ ☆ ☆
ソーラー「以下のように
👇
class Cube {
public: // 🌞アクセス指定子publicが設定されています
int no; //変数noはクラスCubeのメンバ変数とよばれます
float tate; //変数tateはクラスCubeのメンバ変数とよばれます
float yoko; //変数yokoはクラスCubeのメンバ変数とよばれます
float takasa; //変数takasaはクラスCubeのメンバ変数とよばれます
void display(); //自作関数display()はクラスCubeのメンバ関数とよばれます
};
👆
Cubeのクラス宣言で
🍋private🍋
でなく
💖public💖
が
アクセス指定子に用いられているとします
その場合は
💖💖💖main関数内で💖💖💖
cube1のクラスCube型のオブジェクト宣言
Cube cube1;
を
実行すると
オブジェクトcube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
が生成され
オブジェクトcube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
に
cube1.no = 1;
cube1.tate = 2.0;
cube1.yoko = 3.0;
cube1.takasa = 4.0;
と数値データを代入することができます
もちろん
cube1.display();
を実行することもできます。」
マックス「それ、いままでやってきたことなんじゃないか??
そりゃ そうだろう。」
ソーラー「ところが
以下のように
Cubeのクラス宣言内で
💖public💖
でなく
🍋private🍋
が
アクセス指定子に用いられていれば
👇
class Cube {
private: // 🌞👈アクセス指定子privateが設定されています
int no; //変数noはクラスCubeのメンバ変数とよばれます
float tate; //変数tateはクラスCubeのメンバ変数とよばれます
float yoko; //変数yokoはクラスCubeのメンバ変数とよばれます
float takasa; //変数takasaはクラスCubeのメンバ変数とよばれます
void display(); //自作関数display()はクラスCubeのメンバ関数とよばれます
};
👆
💖💖💖main関数内で💖💖💖
cube1のクラスCube型のオブジェクト宣言
Cube cube1;
を
実行した場合
オブジェクトcube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
は生成されていますが
使用することはできません
ですので
オブジェクトcube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
に
cube1.no = 1;
cube1.tate = 2.0;
cube1.yoko = 3.0;
cube1.takasa = 4.0;
と数値データを代入することはできません。
オブジェクトcube1のメンバ関数
cube1.display()
も生成されていますが
使用できなくなっているので
オブジェクトcube1のメンバ関数
cube1.display();
を実行することもできなくなります。
つまり
アクセス指定子privateの働きにより
オブジェクトcube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
オブジェクトcube1のメンバ関数
cube1.display()
が
使用できなくなるんです。」
てんC「
つまり
クラス宣言内で
private:
を先頭に
メンバ変数宣言
メンバ関数宣言
が記述されていると
💖💖💖main関数内で💖💖💖
cube1のクラスCube型のオブジェクト宣言
Cube cube1;
を実行して
オブジェクトcube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
オブジェクトcube1のメンバ関数
cube1.display()
を作製しても
使用することができなくなっているのですね。」
マックス「なにぃぃぃ ということは
Cubeのクラス宣言
Cube cube1;
を
実行しても
まったく意味がないってことになるじゃんかい!」
ソーラー「やったね。 マックス!」
マックス「やったぜ ソーラー!」
ぶーにゃん「しあわせだにゃ~ん💖」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます