クラス内に🌞🌞セッター(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は


オブジェクトのメンバ変数に数値データを設定するだけでなく


設定される数値データに制限をかける


セッター関数というわけです」





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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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