Menu
Coddy logo textTech

Атрибуты (члены данных)

Часть раздела Объектно-ориентированное программирование путешествия по C++ на Coddy — урок 9 из 104.

Члены данных (атрибуты) хранят состояние объекта. Обычно они объявляются как 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;
};

Сделав члены данных private, вы скрываете их от внешнего кода. Геттеры возвращают их значения, а сеттеры изменяют их с возможностью валидации. Это защищает ваши данные и позволяет контролировать доступ к ним.

challenge icon

Задание

Средне

Создайте класс 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;
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Объектно-ориентированное программирование