⚙️
Basics

Functions & Default Arguments

Overloading, Defaults
💡 Function overloading ek hi naam ke multiple "versions" rakhna hai (jaise ek hi remote button, alag context mein alag kaam) — compiler khud decide karta hai kaunsa version chalana hai, arguments dekh kar.

C mein ek naam ka sirf ek function ho sakta hai. C++ "function overloading" allow karta hai — same naam, alag parameters (type ya count), compiler call site par sahi version choose kar leta hai automatically.

C++ "default arguments" bhi deta hai — function declare karte waqt kuch parameters ki default value de sakte ho, taaki call karte waqt unhe skip kiya ja sake.

int add(int a, int b) { return a + b; }
double add(double a, double b) { return a + b; }  // overload — same naam, alag type

void greet(string name, string greeting = "Hello") {  // default argument
  cout << greeting << ", " << name << endl;
}

int main() {
  cout << add(2, 3) << endl;       // 5 (int version)
  cout << add(2.5, 3.5) << endl;   // 6 (double version)

  greet("Aarav");              // "Hello, Aarav" (default greeting)
  greet("Riya", "Namaste");    // "Namaste, Riya"
  return 0;
}
⚙️
Function overloading ek hi naam ke multiple "versions" rakhna hai (jaise ek hi remote button, alag context mein alag kaam) — compiler khud decide karta hai kaunsa version chalana hai, arguments dekh kar.
1 / 2
⚡ Quick Recap
  • Overloading = same function naam, alag parameters
  • Compiler khud sahi version choose karta hai (arguments dekh kar)
  • Default arguments = kuch parameters optional bana sakte ho
Is page mein (1 subtopics)

C++ mein teen tareeke se function ko argument pass kar sakte ho: by value (copy milti hai), by reference (& — original modify ho sakta hai, syntax simple), by pointer (* — original modify ho sakta hai, explicit dereferencing chahiye). Modern C++ usually reference prefer karta hai jab modification chahiye ho.

void byValue(int x) { x = 100; }        // copy — original unaffected
void byReference(int &x) { x = 100; }   // original modify hota hai
void byPointer(int *x) { *x = 100; }    // original modify hota hai, explicit *

int main() {
  int a = 5;
  byValue(a);     cout << a << endl; // 5
  byReference(a); cout << a << endl; // 100
  return 0;
}
💡Tip: Bade objects (jaise strings, vectors) function mein pass karte waqt const reference use karo (const string &s) — copy nahi banti (fast), aur modify bhi nahi ho sakta (safe).