属性 (データメンバ)
CoddyのC++ジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 9/104。
データメンバ(属性)はオブジェクトの状態を保持します。これらは通常 private として宣言され、パブリックな getter/setter メソッドを介してアクセスされます。これはカプセル化と呼ばれます。
プライベートデータメンバ
class BankAccount {
private:
std::string accountName;
int balance;
};パブリックなゲッターとセッター
class BankAccount {
private:
std::string accountName;
int balance;
public:
void setBalance(int balance) {
this->balance = balance;
}
int getBalance() {
return this->balance;
}
};バリデーション付きのセッター
void BankAccount::setBalance(int balance) {
if (balance >= 0) {
this->balance = balance;
}
}アクセス修飾子
class MyClass {
private: // クラス内からのみアクセス可能
int secret;
public: // どこからでもアクセス可能
int getSecret() { return secret; }
protected: // クラスおよびサブクラス内でアクセス可能
int shared;
};データメンバを private にすることで、外部のコードから隠蔽します。ゲッターはその値を返し、セッターは必要に応じてバリデーションを行いながら値を変更します。これにより、データが保護され、アクセス方法を制御できるようになります。
チャレンジ
中級プライベートデータメンバとパブリックアクセスメソッドを持つ BankAccount クラスを作成してください:
- プライベートメンバ:
accountName(string)、balance(int) - セッター:
setAccountName、setBalance - ゲッター:
getAccountName、getBalance deposit(int amount)— amount > 0 の場合、残高に加算しますwithdraw(int amount)— 可能な場合は "Success" を返し、そうでない場合は "Insufficient funds" を返します
チートシート
データメンバ(属性)はオブジェクトの状態を保持し、カプセル化のために通常は private として宣言されます。
プライベートデータメンバ:
class BankAccount {
private:
std::string accountName;
int balance;
};パブリックなゲッターとセッター:
class BankAccount {
private:
std::string accountName;
int balance;
public:
void setBalance(int balance) {
this->balance = balance;
}
int getBalance() {
return this->balance;
}
};バリデーション付きのセッター:
void BankAccount::setBalance(int balance) {
if (balance >= 0) {
this->balance = balance;
}
}アクセス修飾子:
class MyClass {
private: // クラス内からのみアクセス可能
int secret;
public: // どこからでもアクセス可能
int getSecret() { return secret; }
protected: // クラスおよびサブクラス内でアクセス可能
int shared;
};自分で試してみよう
#include <iostream>
#include "BankAccount.h"
int main() {
std::string name;
int initial, depositAmt;
std::getline(std::cin, name);
std::cin >> initial >> depositAmt;
BankAccount account;
account.setAccountName(name);
account.setBalance(initial);
std::cout << "Account: " << account.getAccountName() << std::endl;
std::cout << "Balance: " << account.getBalance() << std::endl;
account.deposit(depositAmt);
std::cout << "After deposit: " << account.getBalance() << std::endl;
std::string result = account.withdraw(2000);
std::cout << "Withdraw 2000: " << result << std::endl;
std::cout << "Final Balance: " << account.getBalance() << std::endl;
return 0;
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
オブジェクト指向プログラミングのすべてのレッスン
3コンストラクタとデストラクタ
デフォルトコンストラクタ引数付きコンストラクタコピーコンストラクタムーブコンストラクタコンストラクタ初期化リスト委譲コンストラクタデストラクタ詳解Rule of Three / Five / Zeroまとめ - Stringクラス6演算子オーバーロード
演算子オーバーロード入門算術演算子のオーバーロード比較演算子のオーバーロードストリーム演算子代入演算子のオーバーロード[] と () 演算子のオーバーロード型変換演算子まとめ:Matrix クラス