🌻天国にいけるC++言語入門🌻 進化し続けるオブジェクト指向プログラミング ver3.2307
カプセル化されていてもオブジェクトのセッター関数によりオブジェクトのメンバ変数に格納されているデータを設定、変更することができます
クラス内に🌞🌞セッター(setter)関数🌞🌞を設定してみよう
カプセル化されていてもオブジェクトのセッター関数によりオブジェクトのメンバ変数に格納されているデータを設定、変更することができます
ソーラー「まずは🐳🐋🐳🐋🐳このプログラムをご覧ください
#include <iostream>
using namespace std;
class Cube {
private:
int no;
private:
float tate;
private:
float yoko;
private:
float takasa;
};
int main() {
Cube cube1;
cube1.no = 5;
cube1.tate = 6.0;
cube1.yoko = 7.0;
cube1.takasa = 8.0;
return 0;
}
プログラムの実行結果
エラー (アクティブ) E0265 メンバー "Cube::yoko" (宣言された 行 12) にアクセスできません
エラー (アクティブ) E0265 メンバー "Cube::tate" (宣言された 行 10) にアクセスできません
エラー (アクティブ) E0265 メンバー "Cube::takasa" (宣言された 行 14) にアクセスできません
エラー (アクティブ) E0265 メンバー "Cube::no" (宣言された 行 8) にアクセスできません
エラー C2248 'Cube::yoko': private メンバー (クラス 'Cube' で宣言されている) にアクセスできません。
エラー C2248 'Cube::tate': private メンバー (クラス 'Cube' で宣言されている) にアクセスできません。
エラー C2248 'Cube::takasa': private メンバー (クラス 'Cube' で宣言されている) にアクセスできません。
エラー C2248 'Cube::no': private メンバー (クラス 'Cube' で宣言されている) にアクセスできません。
マックス「カプセル化の例ってわけだな」
ソーラー「そうですね このプログラムでは
Cubeのクラス宣言内のメンバ変数宣言
int no;
float tate;
float yoko;
float takasa;
のアクセス指定子を
💖private💖
に設定することにより
cube1のCube型のオブジェクト宣言
Cube cube1;
を実行して生成される
オブジェクトcube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
に
cube1.no=5;
cube1.tate=6.0;
cube1.yoko=7.0;
cube1.takasa=8.0;
のように
直接、数値データを代入できないよう
カプセル化を行いました
Cubeのクラス宣言内の
メンバ変数宣言
int no;
float tate;
float yoko;
float takasa;
に設定されている
アクセス指定子がprivateになっているので
オブジェクト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";
を
実行しようとする場合でも
ビルドエラーが表示されることになります
そのことを示すプログラムはこちらになります」
👇
#include <iostream>
using namespace std;
class Cube {
private:
int no;
private:
float tate;
private:
float yoko;
private:
float takasa;
};
cout << "立方体につけられたナンバーは" << no << "です" << "\n";
cout << "立方体の縦の長さは" << tate << "です" << "\n";
cout << "立方体の横の長さは" << yoko << "です" << "\n";
cout << "立方体の高さの長さは" << takasa << "です" << "\n";
}
int main() {
Cube cube1;
//👇ここです
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) にアクセスできません
エラー C2248 'Cube::yoko': private メンバー (クラス 'Cube' で宣言されている) にアクセスできません。
エラー C2248 'Cube::tate': private メンバー (クラス 'Cube' で宣言されている) にアクセスできません。
エラー C2248 'Cube::takasa': private メンバー (クラス 'Cube' で宣言されている) にアクセスできません。
エラー C2248 'Cube::no': private メンバー (クラス 'Cube' で宣言されている) にアクセスできません
マックス「ビルド実行できないか・・・
Cubeのクラス宣言内の
メンバ変数宣言
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
に
cube1.no=10000;
cube1.tate=10000;
cube1.yoko=10000;
cube1.takasa=10000;
のように数値データを代入することもできない
なんか…不便じゃないか?
」
ソーラー「そこで
Cubeのクラス宣言内に
セッター関数setPrice(int a,float b,float c,float d)
のメンバ関数宣言
void setPrice(int a,float b,float c,float d);
を設定してみます
💖セッター関数は💖
😊これから長いお付き合いになる関数なんです😊
Cubeのメンバ関数であるセッター関数setPrice(int a,float b,float c,float d)の定義は
void Cube::setPrice(int a,float b,float c,float d){
no=a;
tate=b;
yoko=c;
takasa=d;
}
とします
このように
Cubeのメンバ関数であるセッター関数setPriceを設定しておけば
cube1のCube型のオブジェクト宣言
Cube cube1;
を実行したとき
オブジェクトcube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
に
格納されている数値データを
変更することができる
オブジェクトcube1のメンバ関数
cube1.setPrice(int a,float b,float c,float d)
を
生成することができます
int a
float b
float c
float d
に数値データ
5
6.0
7.0
8.0
を代入した
cube1.setPrice(5,6.0,7.0,8.0);
を実行すれば
Cubeのメンバ関数であるsetPrice関数の定義内の
no=a;
tate=b;
yoko=c;
takasa=d;
の
no
tate
yoko
takasa
に
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
が
a
b
c
d
に
5
6.0
7.0
8.0
が代入された
cube1.no=5;
cube1.tate=6.0;
cube1.yoko=7.0;
cube1.takasa=8.0;
が実行されることになります
つまり
オブジェクトcube1のメンバ関数
cube1.setPrice(5,6.0,7.0,8.0);
が実行されると
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
に
5
6.0
7.0
8.0
が代入、設定されることになります
つまり
💖セッター関数とは💖
オブジェクトのメンバ変数に数値データを設定するために
クラス内に設定される関数というわけです
ですので
前のエピソードで登場してきた
クラスCubeのメンバ関数display
も
オブジェクトのメンバ変数に数値データを設定することができるので
セッター関数です
クラスCubeのメンバ関数displayの定義は
👇
void Cube::display(int a, float b, float c, float d) {
if(a>=0&&b>=0&&c>=0&&d>=0){
no = a;
tate = b;
yoko = c;
takasa = d;
cout << "立方体につけられたナンバーは" << no << "です" << "\n";
cout << "立方体の縦の長さは" << tate << "です" << "\n";
cout << "立方体の横の長さは" << yoko << "です" << "\n";
cout << "立方体の高さの長さは" << takasa << "です" << "\n";
}
else
cout <<" オブジェクトのメンバ変数にマイナスのデータが入力されています" << "\n";
}
👆
となっていましたね
クラスCubeのメンバ関数displayは
オブジェクトのメンバ変数に数値データを設定するだけでなく
設定される数値データに制限をかける
セッター関数というわけです」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます