فنکشن C++ کی مثالیں۔

Fnkshn C Ky Mthaly



ایک C++ کلاس جو فنکشن کی طرح کام کرتی ہے اسے فنیکٹر کہا جاتا ہے۔ ایک جیسی پرانی فنکشن کال سنٹیکس فنیکٹرز کو پکارنے کے لیے استعمال ہوتی ہے۔ ہم ایک ایسی چیز بناتے ہیں جو فنیکٹر بنانے کے لیے 'آپریٹر()' کو اوورلوڈ کرتا ہے۔ ہم یہ بھی کہہ سکتے ہیں کہ جن اشیاء کو فنکشن یا فنکشن پوائنٹر سے تعبیر کیا جا سکتا ہے انہیں فنکشن کہا جاتا ہے۔ پیرامیٹرک ڈیٹا کی اقسام کی قدروں کا استعمال کرتے ہوئے فنکشنل ایفیکٹس کی ماڈلنگ کرتے وقت، 'فنکٹرز' انتہائی آسان ہوتے ہیں۔ اس مضمون میں، C++ کوڈز کے ساتھ فنیکٹر کے تصور کا تفصیل سے مطالعہ کیا جائے گا۔

مثال 1:

'iostream' ہیڈر فائل ہے جسے ہم یہاں شامل کرتے ہیں کیونکہ ہمیں اس ہیڈر فائل میں اعلان کردہ فنکشنز کو استعمال کرنا ہوتا ہے۔ 'iostream' ہیڈر فائل میں ایک فنکشن ڈیکلریشن ہوتا ہے۔ 'std' نام کی جگہ بھی یہاں شامل کی گئی ہے۔ پھر، ہم 'FunctorClass' نامی ایک کلاس تیار کرتے ہیں۔ اس کے نیچے، ہم یہاں 'public' ٹائپ کرتے ہیں جو کہ پبلک کنسٹرکٹر ہے اور 'operator()' فنکشن رکھتے ہیں۔ پھر، ہم ایک جملہ رکھتے ہیں جسے ہم اسکرین پر 'cout' بیان میں پیش کرنا چاہتے ہیں۔

اس کے بعد، ہم 'main()' فنکشن کو کال کرتے ہیں اور پھر 'My_functor' نام کے ساتھ 'FunctorClass' کا آبجیکٹ بناتے ہیں۔ یہاں، ہم 'my_functor()' فنکشن کو کہتے ہیں تو یہ وہ بیان دکھاتا ہے جسے ہم نے 'operator()' فنکشن کے نیچے شامل کیا ہے۔







کوڈ 1:



# شامل کریں
استعمال کرتے ہوئے نام کی جگہ std ;
کلاس فنیکٹرکلاس {
عوام :
باطل آپریٹر ( ) ( ) {
cout << 'آپریشن یہاں بلایا گیا ہے' ;
}
} ;
int مرکزی ( ) {
FunctorClass my_functor ;
my_functor ( ) ;

واپسی 0 ;
}

آؤٹ پٹ:



وہ لائن جو ہم نے 'FunctorClass' کے 'operator()' فنکشن میں شامل کی ہے وہ یہاں 'my_functor' فنکٹر آبجیکٹ کو استعمال کرتے ہوئے دکھائی دیتی ہے۔





مثال 2:

ہم یہاں 'iostream' ہیڈر فائل شامل کرتے ہیں کیونکہ کچھ فنکشن ڈیکلریشن 'iostream' ہیڈر فائل میں موجود ہے۔ 'std' نام کی جگہ بھی داخل کی گئی ہے۔ اگلا، ہم 'SquareClass' کے نام سے ایک کلاس بناتے ہیں۔



اس کے نیچے، ہم 'پبلک' ٹائپ کرتے ہیں جو کہ پبلک کنسٹرکٹر ہے اور اس کے نیچے 'int' ڈیٹا ٹائپ کے 'operator()' فنکشن کو پوزیشن میں رکھتے ہیں۔ ہم اس 'آپریٹر()' فنکشن میں 'int' ڈیٹا ٹائپ کے 'val' متغیر کو پاس کرتے ہیں۔ یہ فنکشن ضرب کا نتیجہ واپس کرتا ہے جیسا کہ ہم نے 'آپریٹر()' فنکشن کے نیچے 'return()' فنکشن میں 'val * val' داخل کیا ہے۔

اب، 'main()' فنکشن کو یہاں کہا جاتا ہے۔ پھر، آبجیکٹ کو یہاں 'SquareFunctor' کلاس کے 's_functor' کے نام سے بنایا گیا ہے۔ پھر، ہم 'cout' کا استعمال کرتے ہیں جو معلومات فراہم کرنے میں مدد کرتا ہے۔ اس کے بعد، ہم یہاں 'my_functor()' آبجیکٹ کو فنکشن کی طرح کہتے ہیں اور یہ '5 * 5' کے ضرب کا نتیجہ واپس کرتا ہے جیسا کہ ہم نے اسے کال کرتے وقت پیرامیٹر کے طور پر '5' کا اضافہ کیا تھا۔

کوڈ 2:

# شامل کریں
استعمال کرتے ہوئے نام کی جگہ std ;
کلاس اسکوائر کلاس {
عوام :
int آپریٹر ( ) ( int val ) {
واپسی ( val * val ) ;
}
} ;
int مرکزی ( ) {
SquareClass s_functor ;
cout << 'دی گئی قدر کا مربع ہے' << endl ;
cout << s_function ( 5 ) ;

واپسی 0 ;
}

آؤٹ پٹ:

ہمیں 'sqaureClass' کلاس کے 'my_functor' آبجیکٹ جیسے 'my_functor()' فنکشن کو کال کرنے اور پھر '5' کو پاس کرنے کے بعد آؤٹ پٹ ملتا ہے۔ ہمیں نمبر '5' کے مربع کے طور پر '25' ملتا ہے۔

مثال 3:

'iostream' ہیڈر فائل کو یہاں شامل کیا گیا ہے کیونکہ اس میں ایک فنکشن ڈیکلریشن ہے، اور 'std' نام کی جگہ کو بعد میں متعارف کرایا گیا ہے۔ پھر 'ProductFunctor' کلاس بنائی جاتی ہے۔ پبلک کنسٹرکٹر، 'پبلک'، اس کے نیچے ٹائپ کیا جاتا ہے اور 'int' ڈیٹا ٹائپ کا 'operator()' فنکشن اس کے نیچے رکھا جاتا ہے۔ ہم یہاں اس فنکشن کو اوور رائیڈ کرتے ہیں اور اس میں دو پیرامیٹرز پاس کرتے ہیں: 'int var1' اور 'int var2'۔

پھر، ہم اس کے نیچے 'واپسی' کا استعمال کرتے ہیں اور دونوں متغیرات کو ضرب دیتے ہیں جو دونوں نمبروں 'var1 * var2' کے ضرب کا نتیجہ واپس کرتے ہیں۔ پھر 'مین()' فنکشن کو یہاں بلایا جاتا ہے اور ہم 'ProductFunctor' کلاس کے 'P_functor' کے نام سے کلاس آبجیکٹ تیار کرتے ہیں۔ پھر، ہم 'pro_result' کے نام سے ایک نیا متغیر شروع کرتے ہیں اور 'P_functor' آبجیکٹ کو کال کرنے کے بعد 'P_functor()' فنکشن کے طور پر تفویض کرتے ہیں۔

ہم پیرامیٹر کے طور پر '28' اور '63' کو پاس کرتے ہیں۔ یہ دونوں قدروں کو ضرب دے گا اور نتیجہ کو 'pro_result' متغیر میں محفوظ کرے گا جسے ہم 'cout' کا استعمال کرتے ہوئے اس کے نیچے پرنٹ کرتے ہیں اور اس میں 'pro_result' پاس کرتے ہیں۔

کوڈ 3:

# شامل کریں
استعمال کرتے ہوئے نام کی جگہ std ;
کلاس پروڈکٹ فنیکٹر {
عوام :
int آپریٹر ( ) ( int var1، int var2 ) {
واپسی var1 * var2 ;
}
} ;
int مرکزی ( ) {
پروڈکٹ فنیکٹر P_functor ;
int prod_result = پی_فنکشن ( 28 , 63 ) ;
cout << 'پروڈکٹ ہے:' << prod_result << endl ;
واپسی 0 ;
}

آؤٹ پٹ:

ہمیں 'P_functor' آبجیکٹ کو 'P_functor()' فنکشن کے طور پر کال کرنے اور اس میں قدریں منتقل کرنے کے بعد پروڈکٹ حاصل ہوتا ہے۔ ان اقدار کی پیداوار '1764' ہے۔

مثال 4:

'GreetingFunctorClass' اس مثال میں تیار کیا گیا ہے۔ پھر، ہم 'عوامی' کنسٹرکٹر داخل کرتے ہیں اور اس 'پبلک' کنسٹرکٹر میں 'آپریٹر()' فنکشن کو اوور رائیڈ کرتے ہیں۔ ہم ٹائپ کریں 'ہیلو! میں 'آپریٹر()' فنکشن کے نیچے 'cout' رکھنے کے بعد یہاں C++ پروگرامر ہوں۔

اب آگے، ہم 'main()' کو کہتے ہیں۔ ہم یہاں 'g_functor' کو 'GreetingFunctorClass' کے آبجیکٹ کے طور پر بناتے ہیں اور پھر اس 'g_functor' آبجیکٹ کو 'g_functor()' فنکشن کہتے ہیں۔ اس سے وہ نتیجہ ملتا ہے جسے ہم نے 'operator()' فنکشن میں شامل کرتے ہوئے اسے اوور رائیڈ کیا تھا۔

کوڈ 4:

# شامل کریں
استعمال کرتے ہوئے نام کی جگہ std ;
استعمال کرتے ہوئے نام کی جگہ std ;
کلاس گریٹنگ فنیکٹرکلاس {
عوام :
باطل آپریٹر ( ) ( ) {
cout << 'ہیلو! میں یہاں C++ پروگرامر ہوں' ;
}
} ;
int مرکزی ( ) {
GreetingFunctorClass g_functor ;
g_function ( ) ;
واپسی 0 ;
}

آؤٹ پٹ:

یہاں، ہم محسوس کر سکتے ہیں کہ جو بیان ہم نے اپنے کوڈ میں 'operator()' فنکشن کو اوورروڈ کرتے وقت شامل کیا ہے وہ یہاں ظاہر ہوتا ہے کیونکہ ہم کلاس آبجیکٹ کو فنکشن کی طرح کہتے ہیں۔

مثال 5:

'bits/stdc++.h' کو اس بار شامل کیا گیا ہے کیونکہ اس میں تمام ضروری فنکشن ڈیکلریشن شامل ہیں۔ پھر، 'std' نام کی جگہ یہاں رکھی گئی ہے۔ ہم یہاں جو کلاس بناتے ہیں وہ 'incrementFunctor' کلاس ہے۔ پھر، ہم ایک 'پرائیویٹ' کنسٹرکٹر بناتے ہیں اور 'int_num' متغیر کو 'int' ڈیٹا ٹائپ کے ساتھ شروع کرتے ہیں۔

اس کے نیچے، 'پبلک' کنسٹرکٹر، ہم 'incrementFunctor' رکھتے ہیں اور اس کے اندر 'int n1' پاس کرتے ہیں۔ پھر، ہم ':' رکھنے کے بعد 'int_num(n1)' ٹائپ کرتے ہیں۔ پھر، ہم فنکشن کو اوور رائیڈ کرتے ہیں جو کہ 'int' ڈیٹا ٹائپ کا 'operator()' فنکشن ہے اور یہاں 'int arrOfNum' کا اعلان کرتے ہیں۔ پھر ہم 'واپسی' کا استعمال کرتے ہیں اور 'int_num + arrOfNum' داخل کرتے ہیں۔ اب، یہ 'arrOfNum' کی قدروں کو بڑھاتا ہے، ان میں 'int_num' ویلیو کا اضافہ کرتا ہے، اور انہیں یہاں لوٹاتا ہے۔

'main()' کو استعمال کرنے کے بعد، ہم 'arrOfNum' کو شروع کرتے ہیں اور یہاں مختلف عددی اقدار تفویض کرتے ہیں۔ پھر، 'n1' متغیر کو شروع کیا جاتا ہے جہاں ہم 'sizeof' فنکشن جیسے 'sizeof(arrOfNum)/sizeof(arrOfNum[0])' شامل کرتے ہیں۔ اس کے بعد، 'اضافہ نمبر' پھر '3' سے شروع کیا جاتا ہے۔ اب، ہم 'transform()' فنکشن کا استعمال کرتے ہیں۔ یہ 'transform()' وہی ہے جو 'incrementFunctor' کلاس کا آبجیکٹ بنانا اور پھر اس کے آبجیکٹ کو کال کرنا ہے۔ اس کے بعد، ہم 'for' لوپ استعمال کرتے ہیں اور پھر 'arrOfNum[i]' کو 'cout' کرتے ہیں۔

کوڈ 5:

#include
استعمال کرتے ہوئے نام کی جگہ std ;
کلاس incrementFunctor
{
نجی :
int int_num ;
عوام :
incrementFunctor ( int n1 ) : int_num ( n1 ) { }
int آپریٹر ( ) ( int arrOfNum ) const {
واپسی int_num + arrOfNum ;
}
} ;
int مرکزی ( )
{
int arrOfNum [ ] = { 6 , 3 , 2 , 1 , 9 , 0 , 8 } ;
int n1 = کا سائز ( arrOfNum ) / کا سائز ( arrOfNum [ 0 ] ) ;
int اضافی نمبر = 3 ;
تبدیل ( arrOfNum، arrOfNum + n1، arrOfNum، incrementFunctor ( اضافی نمبر ) ) ;

کے لیے ( int میں = 0 ; میں < n1 ; میں ++ )
cout << arrOfNum [ میں ] << ' ;
}

آؤٹ پٹ:

کوڈ کا نتیجہ یہاں دکھایا گیا ہے جس میں 'incrementFunctor' وہ 'Functor' ہے جسے فنکشن کے طور پر استعمال کیا جاتا ہے۔

مثال 6:

اس کوڈ میں، ہم پہلے سے طے شدہ 'گریٹر' فنیکٹر کا استعمال کرتے ہیں۔ یہاں، ہم چار مختلف ہیڈر فائلوں کو شامل کرتے ہیں جیسا کہ ہمیں اپنے کوڈ میں ان کی ضرورت ہوتی ہے کیونکہ ہمارے کوڈ میں جن فنکشنز یا طریقوں کی ضرورت ہوتی ہے ان میں ان کا اعلان کیا جاتا ہے۔ پھر، 'std' کو شامل کرنے اور پھر 'main()' کو کال کرنے کے بعد، ہم 'myIntegerVector' ویکٹر کو شروع کرتے ہیں۔ ہم اس ویکٹر میں کچھ غیر ترتیب شدہ اقدار داخل کرتے ہیں۔ اس کے نیچے، ہم ان ویکٹر ویلیوز کو ترتیب دینے کے لیے 'sort' فنکشن کا اطلاق کرتے ہیں۔

جب ہم اس فنکشن کو استعمال کرتے ہیں، تو یہ قدروں کو صعودی ترتیب میں ترتیب دیتا ہے۔ لیکن ہم یہاں 'زیادہ سے بڑا' استعمال کرتے ہیں جو C++ میں پہلے سے طے شدہ فنکشن ہے جو نزولی ترتیب میں ترتیب دینے کا نتیجہ دیتا ہے۔ اس کے بعد، ہم 'for' لوپ اور پھر 'cout' کی مدد سے ترتیب شدہ اقدار کو ظاہر کرتے ہیں۔

کوڈ 6:

# شامل کریں
#include
#شامل <ویکٹر>
#include
استعمال کرتے ہوئے نام کی جگہ std ;

int مرکزی ( ) {
ویکٹر < int > myIntegerVector = { 13 , اکیس , 19 , 44 , 32 , 42 , 9 , 6 } ;
ترتیب دیں ( myIntegerVector. شروع ( ) , myIntegerVector. اختتام ( ) ، زیادہ < int > ( ) ) ;
کے لیے ( int vec_num : myIntegerVector ) {
cout << vec_num << '' ;
}
واپسی 0 ;
}

آؤٹ پٹ:

ویکٹر کی تمام اقدار کو C++ میں پہلے سے طے شدہ فنیکٹر کی مدد سے ترتیب دیا گیا ہے جو کہ 'زیادہ سے بڑا' فنیکٹر ہے، اور اس کی تعریف 'فنکشنل' ہیڈر فائل میں دستیاب ہے۔

نتیجہ

اس مضمون میں 'فنٹر C++' کے تصور کی گہرائی سے تحقیق کی گئی ہے۔ ہم نے مطالعہ کیا کہ 'operator()' نامی فنکشن کو اوورلوڈ کرنے کے لیے کسی چیز کو فنکشن کے طور پر استعمال کیا جا سکتا ہے۔ یہ فنیکٹر کے طور پر جانا جاتا ہے۔ 'آپریٹر()' کی اوور لوڈنگ کے لیے عوامی رسائی فراہم کی جانی چاہیے تاکہ اسے حسب منشا استعمال کیا جائے۔ ہم نے مختلف مثالیں پیش کیں جن میں ہم نے اپنے کوڈ میں 'فنکٹرز' اور پہلے سے طے شدہ 'فنٹر' کا استعمال کیا۔