Attributes (Data Members)
Part of the Object Oriented Programming section of Coddy's C++ journey — lesson 9 of 104.
Data members (attributes) store an object's state. They are typically declared private and accessed through public getter/setter methods. This is called encapsulation.
Private data members
class BankAccount {
private:
std::string accountName;
int balance;
};Public getters and setters
class BankAccount {
private:
std::string accountName;
int balance;
public:
void setBalance(int balance) {
this->balance = balance;
}
int getBalance() {
return this->balance;
}
};Setters with validation
void BankAccount::setBalance(int balance) {
if (balance >= 0) {
this->balance = balance;
}
}Access specifiers
class MyClass {
private: // Only accessible inside the class
int secret;
public: // Accessible from anywhere
int getSecret() { return secret; }
protected: // Accessible in class and subclasses
int shared;
};Making data members private hides them from outside code. Getters return their values, setters modify them with optional validation. This protects your data and controls how it's accessed.
Challenge
MediumCreate a BankAccount class with private data members and public access methods:
- Private members:
accountName(string),balance(int) - Setters:
setAccountName,setBalance - Getters:
getAccountName,getBalance deposit(int amount)— adds to balance if amount > 0withdraw(int amount)— returns "Success" if possible, otherwise "Insufficient funds"
Cheat sheet
Data members (attributes) store an object's state and are typically declared private for encapsulation.
Private data members:
class BankAccount {
private:
std::string accountName;
int balance;
};Public getters and setters:
class BankAccount {
private:
std::string accountName;
int balance;
public:
void setBalance(int balance) {
this->balance = balance;
}
int getBalance() {
return this->balance;
}
};Setters with validation:
void BankAccount::setBalance(int balance) {
if (balance >= 0) {
this->balance = balance;
}
}Access specifiers:
class MyClass {
private: // Only accessible inside the class
int secret;
public: // Accessible from anywhere
int getSecret() { return secret; }
protected: // Accessible in class and subclasses
int shared;
};Try it yourself
#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;
}This lesson includes a short quiz. Start the lesson to answer it and track your progress.
All lessons in Object Oriented Programming
1Fundamentals of OOP
External FilesC++ Build & CompilationHeader Files & Source FilesNamespaces & ScopeIntroduction to OOP in C++Classes vs ObjectsThe 'this' PointerMethods (Member Functions)Attributes (Data Members)Ctors & Dtors BasicsRecap - Simple Calculator4Class Properties
Instance vs Static MembersGetters and SettersConst Member FunctionsMutable KeywordStatic Methods and VariablesFriend Functions & ClassesRecap - Bank Account Manager7Inheritance
Basic InheritanceInheritance Access LevelsCtor & Dtor Call OrderMethod OverridingVirtual Functions & VTableMultiple InheritanceVirtual InheritanceRecap - Employee Hierarchy2Memory Management
Stack vs Heap MemoryPointers and ReferencesDynamic Memory (new/delete)Smart Pointers in C++RAII in C++Recap - Dynamic Array Manager5Encapsulation
Access Specifiers in C++Access Specifiers In DepthInformation HidingStruct vs ClassNested & Inner ClassesRecap - Student Records System8Polymorphism
Compile vs Runtime PolymorphFunction OverloadingVirtual Functions RevisitedPure Virtual FunctionsAbstract ClassesInterface Design in C++Dynamic Casting & RTTIRecap - Shape Calculator3Constructors & Destructors
Default ConstructorParameterized ConstructorCopy ConstructorMove ConstructorConstructor Init ListsDelegating ConstructorsDestructor Deep DiveRule of Three / Five / ZeroRecap - String Class6Operator Overloading
Intro to Operator OverloadArithmetic Operator OverloadComparison Operator OverloadStream OperatorsAssignment Operator Overload[] and () Operator OverloadType Conversion OperatorsRecap - Matrix Class9Templates
Function TemplatesClass TemplatesTemplate SpecializationVariadic TemplatesSFINAE & Type Traits BasicsRecap - Generic Container