Menu
Coddy logo textTech

属性 (データメンバ)

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 にすることで、外部のコードから隠蔽します。ゲッターはその値を返し、セッターは必要に応じてバリデーションを行いながら値を変更します。これにより、データが保護され、アクセス方法を制御できるようになります。

challenge icon

チャレンジ

中級

プライベートデータメンバとパブリックアクセスメソッドを持つ BankAccount クラスを作成してください:

  • プライベートメンバ: accountName (string)、balance (int)
  • セッター: setAccountNamesetBalance
  • ゲッター: getAccountNamegetBalance
  • 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;
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

オブジェクト指向プログラミングのすべてのレッスン