🔒
OOP Basics

Encapsulation

public, private, protected
💡 Encapsulation ek ATM machine jaisa hai — tum sirf buttons (public interface) use kar sakte ho, andar ka mechanism (private implementation) tumse chhupa hai. Isse machine ko andar se badalna aasan hai bina users ko affect kiye.

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;
}
🔒
Encapsulation ek ATM machine jaisa hai — tum sirf buttons (public interface) use kar sakte ho, andar ka mechanism (private implementation) tumse chhupa hai. Isse machine ko andar se badalna aasan hai bina users ko affect kiye.
1 / 2
⚡ Quick Recap
  • 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
Is page mein (1 subtopics)

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
}
⚠️Common Mistake: friend overuse karna encapsulation ke poore purpose ko kamzor kar deta hai — sirf tab use karo jab genuinely zaroori ho (jaise operator overloading, aage seekhenge).