Encapsulation
Encapsulation ka matlab hai data (member variables) ko direct access se protect karna, aur sirf controlled methods (getters/setters) ke through access dena. C++ mein 3 access specifiers hain: public (kahi se bhi accessible), private (sirf usi class ke andar), protected (class aur uske derived classes mein — inheritance mein aage aayega).
Fayda: agar validation chahiye (jaise age negative na ho), sirf setter method mein check likhna padta hai — data ko direct badalne se rok kar, class apni internal consistency guarantee kar sakti hai.
class BankAccount {
private:
double balance; // direct access blocked
public:
BankAccount(double initial) { balance = initial; }
void deposit(double amount) {
if (amount > 0) balance += amount; // validation!
}
double getBalance() {
return balance;
}
};
int main() {
BankAccount acc(1000);
acc.deposit(500);
// acc.balance = -99999; // ERROR: private hai, direct access nahi
cout << acc.getBalance() << endl; // 1500
return 0;
}- private = sirf class ke andar, public = kahi se bhi, protected = class + derived classes
- Getters/setters se controlled access aur validation possible hai
- Internal implementation chhupakar future changes aasan bante hain
friend keyword ek specific outside function/class ko private members access karne deta hai — encapsulation ka "controlled exception", jab do classes ko bahut closely kaam karna ho lekin poora public interface expose karna sahi na lage.
class Box {
private:
int width;
public:
Box(int w) : width(w) {}
friend void printWidth(Box b); // friend function declare
};
void printWidth(Box b) {
cout << b.width << endl; // private member access, friend hone ki wajah se
}