🏗️
OOP Basics

Constructors

Object Banate Waqt Auto-Setup
💡 Constructor ek naye ghar ki "move-in checklist" hai — ghar (object) banते hi automatically chalta hai, taaki zaroori setup (lights on, furniture placed) ho jaaye bina manually har baar bolne ke.

Constructor ek special member function hai jo automatically call hota hai jab object banaya jaata hai — class ke naam jaisa hi naam hota hai, koi return type nahi. Isse members ko initialize karna guarantee hota hai — koi uninitialized/garbage data nahi rehta.

C++ multiple constructors allow karta hai (overloading): default constructor (koi parameters nahi), parameterized constructor (values leke initialize karta hai), aur copy constructor (ek existing object se naya banata hai).

class Car {
  public:
    string brand;
    int speed;

    Car() {                     // default constructor
      brand = "Unknown";
      speed = 0;
    }

    Car(string b, int s) {      // parameterized constructor
      brand = b;
      speed = s;
    }
};

int main() {
  Car car1;                 // default constructor chalega
  Car car2("Tesla", 120);   // parameterized constructor chalega

  cout << car1.brand << endl;  // "Unknown"
  cout << car2.brand << endl;  // "Tesla"
  return 0;
}
🏗️
Constructor ek naye ghar ki "move-in checklist" hai — ghar (object) banते hi automatically chalta hai, taaki zaroori setup (lights on, furniture placed) ho jaaye bina manually har baar bolne ke.
1 / 2
⚡ झट से Recap
  • Constructor = class ke naam jaisa function, object banate hi auto-chalta hai
  • Default aur parameterized dono ho sakte hain (overloading)
  • Members ko guaranteed initialize karne ka tareeka
इस page में (2 subtopics)

Copy constructor tab call hota hai jab ek naya object kisi existing object se banaya jaata hai — Car car2 = car1; ya function ko object value se pass karte waqt. Default copy constructor member-by-member copy karta hai (shallow copy) — agar class mein pointers hain, ye problematic ho sakta hai (dono objects same memory point karenge).

class Car {
  public:
    string brand;

    Car(string b) { brand = b; }

    Car(const Car &other) {   // custom copy constructor
      brand = other.brand;
      cout << "Copy ho raha hai!" << endl;
    }
};

int main() {
  Car car1("Tesla");
  Car car2 = car1;   // copy constructor chalega
  return 0;
}
⚠️Common Mistake: Agar class heap memory allocate karti hai (pointer member), default copy constructor "shallow copy" karta hai — dono objects SAME memory point karenge, aur ek delete karne se doosra dangling ho jaayega. Aisi cases mein custom copy constructor (deep copy) likhna zaroori hai.

Constructor body ke andar assign karne ke bajaye, member initializer list (: ke baad) use karna zyada efficient hai — members directly initialize hote hain, pehle default-construct phir assign nahi karna padta. const members aur references ke liye ye ZAROORI bhi hai (unhe baad mein assign nahi kar sakte).

class Point {
  const int x;   // const member — sirf initializer list se set ho sakta hai

  public:
    Point(int xVal) : x(xVal) {   // member initializer list
      // body mein x = xVal; NAHI kar sakte — x const hai
    }
};
💡Tip: Members initializer list mein wahi order mein initialize hote hain jis order mein class mein DECLARE hue hain — initializer list mein likhne ka order matter nahi karta, sirf declaration order matter karta hai.