Atrybuty (składowe danych)
Część sekcji Programowanie obiektowe ścieżki C++ w Coddy. Lekcja 9 z 104.
Pola danych (atrybuty) przechowują stan obiektu. Zazwyczaj są deklarowane jako private i dostęp do nich uzyskuje się za pomocą publicznych metod pobierających i ustawiających. Nazywa się to hermetyzacją.
Prywatne składowe danych
class BankAccount {
private:
std::string accountName;
int balance;
};Publiczne metody pobierające i ustawiające
class BankAccount {
private:
std::string accountName;
int balance;
public:
void setBalance(int balance) {
this->balance = balance;
}
int getBalance() {
return this->balance;
}
};Settery z walidacją
void BankAccount::setBalance(int balance) {
if (balance >= 0) {
this->balance = balance;
}
}Specyfikatory dostępu
class MyClass {
private: // Dostępne tylko wewnątrz klasy
int secret;
public: // Dostępne z dowolnego miejsca
int getSecret() { return secret; }
protected: // Dostępne w klasie i jej klasach pochodnych
int shared;
};Ustawienie składowych danych jako private ukrywa je przed kodem zewnętrznym. Gettery zwracają ich wartości, a settery je modyfikują, opcjonalnie je walidując. Chroni to Twoje dane i pozwala kontrolować sposób dostępu do nich.
Wyzwanie
ŚredniUtwórz klasę BankAccount z prywatnymi składowymi danych i publicznymi metodami dostępu:
- Prywatne składowe:
accountName(string),balance(int) - Settery:
setAccountName,setBalance - Gettery:
getAccountName,getBalance deposit(int amount): zwiększa saldo, jeśli amount > 0withdraw(int amount): zwraca "Success", jeśli to możliwe, w przeciwnym razie "Insufficient funds"
Spróbuj swoich sił
#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;
}Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrzneBudowanie i kompilacja C++Pliki nagłówkowe i pliki źródłowePrzestrzenie nazw i zakresWprowadzenie do programowania obiektowego w C++Klasy a obiektyWskaźnik „this”Metody (funkcje składowe)Atrybuty (składowe danych)Podstawy konstruktorów i destruktorówPowtórzenie – prosty kalkulator4Właściwości klas
Elementy instancji a elementy statyczneGettery i setteryStałe funkcje składoweSłowo kluczowe mutableMetody i zmienne statyczneFunkcje i klasy zaprzyjaźnionePodsumowanie – menedżer konta bankowego7Dziedziczenie
Podstawy dziedziczeniaPoziomy dostępu w dziedziczeniuKolejność wywołań konstruktora i destruktoraNadpisywanie metodFunkcje wirtualne i VTableWielokrotne dziedziczenieDziedziczenie wirtualnePowtórzenie — hierarchia pracowników2Zarządzanie pamięcią
Pamięć stosu a stertyWskaźniki i referencjePamięć dynamiczna (new/delete)Inteligentne wskaźniki w C++RAII w C++Podsumowanie — menedżer tablicy dynamicznej5Hermetyzacja
Specyfikatory dostępu w C++Specyfikatory dostępu — szczegółowoUkrywanie informacjiStruktura a klasaKlasy zagnieżdżone i wewnętrznePodsumowanie — system ewidencji studentów8Polimorfizm
Polimorfizm czasu kompilacji i wykonaniaPrzeciążanie funkcjiFunkcje wirtualne — powtórkaCzysto wirtualne funkcjeKlasy abstrakcyjneProjektowanie interfejsów w C++Rzutowanie dynamiczne i RTTIPodsumowanie — kalkulator kształtów3Konstruktory i destruktory
Konstruktor domyślnyKonstruktor z parametramiKonstruktor kopiującyKonstruktor przenoszącyListy inicjalizacyjne konstruktoraKonstruktory delegująceDestruktor — szczegółowe omówienieZasada trzech / pięciu / zeraPodsumowanie — klasa String6Przeciążanie operatorów
Wprowadzenie do przeciążania operatorówPrzeciążanie operatorów arytmetycznychPrzeciążanie operatorów porównaniaOperatory strumieniowePrzeciążanie operatora przypisaniaPrzeciążanie operatorów [] i ()Operatory konwersji typówPodsumowanie — klasa Matrix9Szablony
Szablony funkcjiSzablony klasSpecjalizacja szablonówSzablony wariadycznePodstawy SFINAE i cech typówPodsumowanie — kontener generycznyPoćwicz samodzielnie: Kompilator C++ online