Atributos (Membros de Dados)
Parte da seção Programação Orientada a Objetos do Journey de C++ da Coddy — lição 9 de 104.
Membros de dados (atributos) armazenam o estado de um objeto. Eles são tipicamente declarados como private e acessados por meio de métodos getter/setter públicos. Isso é chamado de encapsulamento.
Membros de dados privados
class BankAccount {
private:
std::string accountName;
int balance;
};Getters e setters públicos
class BankAccount {
private:
std::string accountName;
int balance;
public:
void setBalance(int balance) {
this->balance = balance;
}
int getBalance() {
return this->balance;
}
};Setters com validação
void BankAccount::setBalance(int balance) {
if (balance >= 0) {
this->balance = balance;
}
}Especificadores de acesso
class MyClass {
private: // Acessível apenas dentro da classe
int secret;
public: // Acessível de qualquer lugar
int getSecret() { return secret; }
protected: // Acessível na classe e subclasses
int shared;
};Tornar os membros de dados private os esconde do código externo. Getters retornam seus valores, setters os modificam com validação opcional. Isso protege seus dados e controla como eles são acessados.
Desafio
MédioCrie uma classe BankAccount com membros de dados privados e métodos de acesso públicos:
- Membros privados:
accountName(string),balance(int) - Setters:
setAccountName,setBalance - Getters:
getAccountName,getBalance deposit(int amount)— adiciona ao saldo se o valor for > 0withdraw(int amount)— retorna "Success" se possível, caso contrário "Insufficient funds"
Folha de consulta
Membros de dados (atributos) armazenam o estado de um objeto e são tipicamente declarados como private para encapsulamento.
Membros de dados privados:
class BankAccount {
private:
std::string accountName;
int balance;
};Getters e setters públicos:
class BankAccount {
private:
std::string accountName;
int balance;
public:
void setBalance(int balance) {
this->balance = balance;
}
int getBalance() {
return this->balance;
}
};Setters com validação:
void BankAccount::setBalance(int balance) {
if (balance >= 0) {
this->balance = balance;
}
}Especificadores de acesso:
class MyClass {
private: // Acessível apenas dentro da classe
int secret;
public: // Acessível de qualquer lugar
int getSecret() { return secret; }
protected: // Acessível na classe e subclasses
int shared;
};Experimente você mesmo
#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;
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Programação Orientada a Objetos
1Fundamentos de OOP
Arquivos ExternosBuild e Compilação em C++Arquivos Header e SourceNamespaces e EscopoIntrodução a OOP em C++Classes vs ObjetosO Ponteiro 'this'Métodos (Funções Membro)Atributos (Membros de Dados)Básico de Ctors e DtorsRecapitulação - Calculadora Simples4Propriedades de Classe
Membros de Instância vs EstáticosGetters e SettersFunções de Membro ConstPalavra-chave MutableMétodos e Variáveis EstáticosFunções e Classes FriendRecapitulação - Gerenciador de Conta Bancária7Herança
Herança BásicaNíveis de Acesso na HerançaOrdem de Chamada de Ctor e DtorSobrescrita de MétodosFunções Virtuais e VTableHerança MúltiplaHerança VirtualRecapitulação - Hierarquia de Funcionários2Gerenciamento de Memória
Memória Stack vs HeapPonteiros e ReferênciasMemória Dinâmica (new/delete)Smart Pointers em C++RAII em C++Recapitulação - Gerenciador de Array Dinâmico5Encapsulamento
Especificadores de Acesso em C++Especificadores de Acesso em DetalhesOcultação de InformaçãoStruct vs ClassClasses Aninhadas e InternasRecapitulação - Sistema de Registros de Alunos8Polimorfismo
Polimorfismo de Compilação vs Tempo de ExecuçãoSobrecarga de FunçõesFunções Virtuais RevisitadasFunções Virtuais PurasClasses AbstratasDesign de Interfaces em C++Dynamic Casting e RTTIRecapitulação - Calculadora de Formas3Construtores e Destrutores
Construtor PadrãoConstrutor ParametrizadoConstrutor de CópiaConstrutor de MovimentaçãoListas de Inicialização do ConstrutorConstrutores DelegadosMergulho Profundo em DestrutoresRegra dos Três / Cinco / ZeroRecapitulação - Classe String6Sobrecarga de Operadores
Introdução à Sobrecarga de OperadoresSobrecarga de Operadores AritméticosSobrecarga de Operadores de ComparaçãoOperadores de StreamSobrecarga do Operador de AtribuiçãoSobrecarga dos Operadores [] e ()Operadores de Conversão de TipoRecapitulação - Classe Matrix9Templates
Templates de FunçãoTemplates de ClasseEspecialização de TemplatesTemplates VariádicosFundamentos de SFINAE e Type TraitsRecapitulação - Container Genérico