Menu
CoddyTech

Thuộc tính (dữ liệu thành viên)

Thuộc phần Lập trình hướng đối tượng trong hành trình C++ của Coddy. Bài học 9 trên 104.

Các thành viên dữ liệu (thuộc tính) lưu trữ trạng thái của một đối tượng. Chúng thường được khai báo là private và được truy cập thông qua các phương thức getter/setter công khai. Đây được gọi là tính đóng gói.

Các thành viên dữ liệu riêng tư

class BankAccount {
private:
    std::string accountName;
    int balance;
};

Getter và setter công khai

class BankAccount {
private:
    std::string accountName;
    int balance;

public:
    void setBalance(int balance) {
        this->balance = balance;
    }
    
    int getBalance() {
        return this->balance;
    }
};

Phương thức setter có kiểm tra tính hợp lệ

void BankAccount::setBalance(int balance) {
    if (balance >= 0) {
        this->balance = balance;
    }
}

Các từ chỉ định quyền truy cập

class MyClass {
private:    // Chỉ có thể truy cập trong lớp
    int secret;

public:     // Có thể truy cập từ mọi nơi
    int getSecret() { return secret; }

protected:  // Có thể truy cập trong lớp và các lớp con
    int shared;
};

Đặt các thành viên dữ liệu thành private sẽ ẩn chúng khỏi code bên ngoài. Hàm getter trả về giá trị của chúng, còn hàm setter sửa đổi chúng và có thể kiểm tra tính hợp lệ. Cách này bảo vệ dữ liệu và kiểm soát cách truy cập dữ liệu.

challenge icon

Thử thách

Trung bình

Tạo một lớp BankAccount với các thành viên dữ liệu riêng tư và các phương thức truy cập công khai:

  • Thành viên riêng tư: accountName (chuỗi), balance (số nguyên)
  • Hàm thiết lập: setAccountName, setBalance
  • Hàm lấy giá trị: getAccountName, getBalance
  • deposit(int amount): cộng vào số dư nếu amount > 0
  • withdraw(int amount): trả về "Success" nếu có thể, nếu không thì trả về "Insufficient funds"

Tự làm thử

#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 iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Trình biên dịch C++ online