Menu
CoddyTech

属性(数据成员)

本课属于 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(字符串)、balance(int)
  • 设置方法:setAccountName、setBalance
  • 获取方法:getAccountName、getBalance
  • deposit(int amount):如果 amount > 0,则增加余额
  • withdraw(int amount):如果可以取款,则返回 "Success",否则返回 "Insufficient funds"

亲手试试

#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自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

面向对象编程中的所有课

自己练习: C++ 在线编译器