مرکزی مواد پر جائیں
ماڈیول 3 · سبق 2 از 2کورس میں 8/18~12 min
ماڈیول اسباق (2/2)

قدر اور حوالہ سے گزریں۔

C++ میں، جب آپ کسی فنکشن کو دلیل دیتے ہیں، تو اسے کرنے کے دو اہم طریقے ہوتے ہیں: قدر کے لحاظ سے یا بذریعہ حوالہ۔

اس فرق کو سمجھنا پروگرام کی درستگی اور کارکردگی کی اصلاح دونوں کی کلید ہے۔

قدر سے گزرنا (کاپی)

پہلے سے طے شدہ طور پر، C++ قدر کے لحاظ سے دلائل پاس کرتا ہے۔ اس کا مطلب ہے کہ ڈیٹا کی کاپی میموری میں بنائی گئی ہے۔ فنکشن کے اندر کی گئی کوئی بھی ترمیم باہر کے اصل متغیر کو متاثر نہیں کرے گی:

C++
#include <iostream>

void increment(int n) {
    n++; // Modifies only the local copy
}

int main() {
    int x = 5;
    increment(x);
    std::cout << x << std::endl; // Prints 5, x remains unchanged!
    return 0;
}

حوالہ سے گزریں (&)

اگر آپ چاہتے ہیں کہ فنکشن اصل متغیر میں ترمیم کرنے کے قابل ہو، یا اگر آپ بڑی اشیاء (جیسے لمبی تار یا ویکٹر) کو کاپی کرنے سے بچنا چاہتے ہیں، تو آپ کو پاس بائی ریفرنس استعمال کرنا چاہیے۔

پیرامیٹر کی قسم کے بعد & علامت شامل کرکے حوالہ کا اعلان کیا جاتا ہے:

C++
#include <iostream>

void incrementRef(int& n) {
    n++; // Modifies the original variable directly
}

int main() {
    int x = 5;
    incrementRef(x);
    std::cout << x << std::endl; // Prints 6!
    return 0;
}

پیرامیٹر int& n ایک کاپی نہیں ہے، بلکہ فنکشن کو کال کرتے وقت پاس کردہ متغیر x کا ایک عرف (ایک براہ راست حوالہ) ہے۔

خود ہی آزمائیں۔

ورزش#cpp.m3.l2.e1
کوششیں: 0لوڈ ہو رہا ہے…

ڈبل نمبر نامی ایک فنکشن کو باطل واپسی کی قسم کے ساتھ متعین کریں جو ایک عدد n کا حوالہ لیتا ہے (int&n کا استعمال کرتے ہوئے) اور اس کی قدر کو دوگنا کرتا ہے (n = n * 2)۔ اس کو مین پاس کرتے ہوئے متغیر ویل کو 10 پر شروع کریں، پھر پرنٹ ویل کریں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

فنکشن کا دستخط حوالہ کی نشاندہی کرنے کے لیے قسم کے بعد `&`کریکٹر استعمال کرتا ہے:`void doubleNumber(int&n)`۔

3 کوششوں کے بعد حل دستیاب ہے۔

ورزش#cpp.m3.l2.e2
کوششیں: 0لوڈ ہو رہا ہے…

سویپ نامی فنکشن کی وضاحت کریں جو دو عددی حوالہ جات a اور b (int&a, int&b) لیتا ہے اور عارضی متغیر temp کا استعمال کرتے ہوئے ان کی قدروں کو تبدیل کرتا ہے۔ x اور y کو تبدیل کرنے کے لئے اسے مین میں کال کریں، اور پھر انہیں پرنٹ کریں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

استعمال کریں `int temp = a; a = b؛ b = temp;` قدروں کو تبدیل کرنے کے لیے۔

3 کوششوں کے بعد حل دستیاب ہے۔