Constructors
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 = 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
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;
}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
}
};