फंक्शन पॉइंटर: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
 
(9 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{short description|Pointer that points to a function}}
{{short description|Pointer that points to a function}}
{{Use American English|date=July 2022}}
'''फ़ंक्शन पॉइंटर''', जिसे [[सबरूटीन]] पॉइंटर या प्रोसेस पॉइंटर भी कहा जाता है, [[सूचक (कंप्यूटर प्रोग्रामिंग)]] है जो किसी फ़ंक्शन को इंगित करता है। डेटा मान को संदर्भित करने के विरोध में, फ़ंक्शन पॉइंटर स्मृति के अंदर निष्पादन योग्य कोड को इंगित करता है। [[डेरेफरेंस ऑपरेटर]] फ़ंक्शन पॉइंटर संदर्भित सबरूटीन उत्पन्न करता है, जिसे सामान्य फ़ंक्शन कॉल की तरह ही प्रयुक्त किया जा सकता है और तर्क पारित किया जा सकता है। इस तरह के आह्वान को अप्रत्यक्ष कॉल के रूप में भी जाना जाता है, क्योंकि निश्चित पहचानकर्ता या पते के माध्यम से 'प्रत्यक्ष' के अतिरिक्त वेरिएबल के माध्यम से 'अप्रत्यक्ष रूप से' फ़ंक्शन का आह्वान किया जा रहा है।
एक फ़ंक्शन पॉइंटर, जिसे [[सबरूटीन]] पॉइंटर या प्रोसेस पॉइंटर भी कहा जाता है, एक [[सूचक (कंप्यूटर प्रोग्रामिंग)]] है जो किसी फ़ंक्शन को इंगित करता है। डेटा मान को संदर्भित करने के विरोध में, फ़ंक्शन पॉइंटर स्मृति के अंदर निष्पादन योग्य कोड को इंगित करता है। [[डेरेफरेंस ऑपरेटर]] फ़ंक्शन पॉइंटर संदर्भित सबरूटीन उत्पन्न करता है, जिसे सामान्य फ़ंक्शन कॉल की तरह ही प्रयुक्त किया जा सकता है और तर्क पारित किया जा सकता है। इस तरह के आह्वान को एक अप्रत्यक्ष कॉल के रूप में भी जाना जाता है, क्योंकि एक निश्चित पहचानकर्ता या पते के माध्यम से 'सीधे' के अतिरिक्त एक चर के माध्यम से 'अप्रत्यक्ष रूप से' फ़ंक्शन का आह्वान किया जा रहा है।


फ़ंक्शन पॉइंटर्स का उपयोग रन-टाइम मानों के आधार पर निष्पादित करने के लिए फ़ंक्शन का चयन करने का एक आसान विधि प्रदान करके कोड को सरल बनाने के लिए किया जा सकता है।
फ़ंक्शन पॉइंटर्स का उपयोग कार्यसमय मानों के आधार पर निष्पादित करने के लिए फ़ंक्शन का चयन करने का सरल विधि प्रदान करके कोड को सरल बनाने के लिए किया जा सकता है।


फंक्शन पॉइंटर्स [[तीसरी पीढ़ी की [[प्रोग्रामिंग भाषा]]]] द्वारा समर्थित हैं | तीसरी पीढ़ी की प्रोग्रामिंग भाषाएँ (जैसे PL/I, [[COBOL]], [[फोरट्रान]],<ref>{{cite web|url=http://www.esm.psu.edu/~ajm138/fortranexamples.html#ex1|title=Fortran Examples|author=Andrew J. Miller|access-date=2013-09-14}}</ref> dBASE dBL, और C (प्रोग्रामिंग लैंग्वेज)) और [[ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग]] लैंग्वेज (जैसे C ++, C Sharp (प्रोग्रामिंग लैंग्वेज) | C #, और D (प्रोग्रामिंग लैंग्वेज))<ref>{{cite web|url=http://www.newty.de/fpt/intro.html#what|title=The Function Pointer Tutorials|publisher=logo|access-date=2011-04-13|quote=Function Pointers are pointers, i.e. variables, which point to the address of a function}}</ref>
फंक्शन पॉइंटर्स तीसरी पीढ़ी की [[प्रोग्रामिंग भाषा|प्रोग्रामिंग लैंग्वेज]] द्वारा समर्थित हैं | तीसरी पीढ़ी की प्रोग्रामिंग लैंग्वेज (जैसे पीएल/आई,कोबोल, [[फोरट्रान]],<ref>{{cite web|url=http://www.esm.psu.edu/~ajm138/fortranexamples.html#ex1|title=Fortran Examples|author=Andrew J. Miller|access-date=2013-09-14}}</ref> डीबेस डीबीएल, और सी (प्रोग्रामिंग लैंग्वेज)) और [[ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग]] लैंग्वेज (जैसे सी ++, सी Sharp (प्रोग्रामिंग लैंग्वेज) | सी #, और डी(प्रोग्रामिंग लैंग्वेज)) आदि है।<ref>{{cite web|url=http://www.newty.de/fpt/intro.html#what|title=The Function Pointer Tutorials|publisher=logo|access-date=2011-04-13|quote=Function Pointers are pointers, i.e. variables, which point to the address of a function}}</ref>




== सरल फ़ंक्शन पॉइंटर्स ==
== सरल फ़ंक्शन पॉइंटर्स ==
एक फ़ंक्शन (या सबरूटीन) सूचक का सरलतम कार्यान्वयन एक [[चर (कंप्यूटर विज्ञान)]] के रूप में होता है जिसमें निष्पादन योग्य मेमोरी के अंदर फ़ंक्शन का मेमोरी पता होता है। पुरानी तीसरी पीढ़ी की प्रोग्रामिंग भाषा | तीसरी पीढ़ी की भाषाएँ जैसे PL/I और COBOL, साथ ही अधिक आधुनिक भाषाएँ जैसे [[पास्कल (प्रोग्रामिंग भाषा)]] और C (प्रोग्रामिंग भाषा) सामान्यतः इस तरह से फ़ंक्शन पॉइंटर्स को प्रयुक्त करती हैं।<ref>{{cite web
एक फ़ंक्शन (या सबरूटीन) सूचक का सरलतम कार्यान्वयन [[चर (कंप्यूटर विज्ञान)|वेरिएबल (कंप्यूटर विज्ञान)]] के रूप में होता है जिसमें निष्पादन योग्य मेमोरी के अंदर फ़ंक्शन का मेमोरी पता होता है। पुरानी तीसरी पीढ़ी की प्रोग्रामिंग लैंग्वेज | तीसरी पीढ़ी की लैंग्वेज जैसे पीएल/आई औरकोबोल, साथ ही अधिक आधुनिक लैंग्वेज जैसे [[पास्कल (प्रोग्रामिंग भाषा)|पास्कल (प्रोग्रामिंग लैंग्वेज)]] और सी (प्रोग्रामिंग लैंग्वेज) सामान्यतः इस तरह से फ़ंक्शन पॉइंटर्स को प्रयुक्त करती हैं।<ref>{{cite web
| access-date = 2011-04-13
| access-date = 2011-04-13
| publisher = logo
| publisher = logo
Line 16: Line 15:
| url = http://www.newty.de/fpt/intro.html#top}}</ref>
| url = http://www.newty.de/fpt/intro.html#top}}</ref>


 
=== सी में उदाहरण ===
=== सी === में उदाहरण
{{See also|#वैकल्पिक सी और सी ++ सिंटैक्स}}
{{See also|#Alternate C and C++ syntax}}
निम्नलिखित सी प्रोग्राम दो फ़ंक्शन पॉइंटर्स के उपयोग को दिखाता है:
निम्नलिखित सी प्रोग्राम दो फ़ंक्शन पॉइंटर्स के उपयोग को दिखाता है:
* func1 एक डबल-सटीक (डबल) पैरामीटर लेता है और दूसरा डबल देता है, और एक फ़ंक्शन को असाइन किया जाता है जो सेंटीमीटर को इंच में परिवर्तित करता है।
* func1 एक डबल-स्पष्ट (डबल) पैरामीटर लेता है और दूसरा डबल देता है, और फ़ंक्शन को समुनदेशित किया जाता है जो सेंटीमीटर को इंच में परिवर्तित करता है।
* func2 एक निरंतर वर्ण सरणी के साथ-साथ एक पूर्णांक के लिए एक सूचक लेता है और एक वर्ण को एक सूचक देता है, और एक C स्ट्रिंग हैंडलिंग फ़ंक्शन को सौंपा जाता है जो किसी वर्ण सरणी में दिए गए वर्ण की पहली घटना के लिए एक सूचक देता है।
* func2 निरंतर वर्ण सरणी के साथ-साथ पूर्णांक के लिए सूचक लेता है और वर्ण को सूचक देता है, और एक सी स्ट्रिंग हैंडलिंग फ़ंक्शन को सौंपा जाता है जो किसी वर्ण सरणी में दिए गए वर्ण की पहली घटना के लिए सूचक देता है।
<syntaxhighlight>
#include <stdio.h>  /* for printf */
#include <string.h> /* for strchr */


<वाक्यविन्यास प्रकाश लैंग = सी>
double cm_to_inches(double cm) {
#include <stdio.h> /* प्रिंटफ के लिए */
return cm / 2.54;
#include <string.h> /* strchr के लिए */
 
डबल सेमी_टू_इंच (डबल सेमी) {
वापसी सेमी / 2.54;
}
}


// strchr [[सी स्ट्रिंग हैंडलिंग]] का हिस्सा है (अर्थात, घोषणा की कोई आवश्यकता नहीं है)
// "strchr" is part of the C string handling (i.e., no need for declaration)
// https://en.wikipedia.org/wiki/C_string_handling#Functions देखें
// See https://en.wikipedia.org/wiki/C_string_handling#Functions


पूर्णांक मुख्य (शून्य) {
int main(void) {
डबल (*func1)(डबल) = cm_to_inches;
double (*func1)(double) = cm_to_inches;
चार * (* func2) (स्थिरांक चार *, int) = strchr;
char * (*func2)(const char *, int) = strchr;
प्रिंटफ (% f% s, func1 (15.0), func2 (विकिपीडिया, 'पी'));
printf("%f %s", func1(15.0), func2("Wikipedia", 'p'));
/* 5.905512 पीडिया प्रिंट करता है */
/* prints "5.905512 pedia" */
वापसी 0;
return 0;
}
}
</वाक्यविन्यास हाइलाइट>
</syntaxhighlight>


अगला प्रोग्राम दो कार्यों में से एक को प्रयुक्त करने के लिए फ़ंक्शन पॉइंटर का उपयोग करता है (<code>sin</code> या <code>cos</code>) अप्रत्यक्ष रूप से किसी अन्य फ़ंक्शन से (<code>compute_sum</code>, फ़ंक्शन के रिमेंन एकीकरण के एक अनुमान की गणना)। कार्यक्रम कार्य करके संचालित होता है <code>main</code> कॉल समारोह <code>compute_sum</code> दो बार, इसे लाइब्रेरी फ़ंक्शन के लिए एक पॉइंटर पास करना <code>sin</code> पहली बार, और कार्य करने के लिए एक सूचक <code>cos</code> सेकंड समय। समारोह <code>compute_sum</code> बदले में अपने फ़ंक्शन पॉइंटर तर्क को संदर्भित करके अप्रत्यक्ष रूप से दो कार्यों में से एक को आमंत्रित करता है <code>funcp</code> कई बार, उन मानों को एक साथ जोड़कर जो इनवोक किए गए फ़ंक्शन लौटाते हैं और परिणामी राशि लौटाते हैं। दो राशियों को मानक आउटपुट द्वारा लिखा जाता है <code>main</code>.


<वाक्यविन्यास लैंग = सी लाइन = 1>
अगला प्रोग्राम दो कार्यों में से एक को प्रयुक्त करने के लिए फ़ंक्शन पॉइंटर का उपयोग करता है (<code>sin</code> या <code>cos</code>) अप्रत्यक्ष रूप से किसी अन्य फ़ंक्शन से (<code>compute_sum</code>, फ़ंक्शन के रिमेंन एकीकरण के अनुमान की गणना)। कार्यक्रम कार्य करके संचालित होता है <code>main</code> कॉल फ़ंक्शन <code>compute_sum</code> दो बार, इसे लाइब्रेरी फ़ंक्शन के लिए पॉइंटर पास करना <code>sin</code> पहली बार, और कार्य करने के लिए सूचक <code>cos</code> सेकंड समय। फ़ंक्शन <code>compute_sum</code> बदले में अपने फ़ंक्शन पॉइंटर तर्क को संदर्भित करके अप्रत्यक्ष रूप से दो कार्यों में से एक को आमंत्रित करता है <code>funcp</code> कई बार, उन मानों को साथ जोड़कर जो इनवोक किए गए फ़ंक्शन लौटाते हैं और परिणामी राशि लौटाते हैं। दो राशियों को <code>main</code> मानक आउटपुट द्वारा लिखा जाता है .<syntaxhighlight>
#सम्मिलित  <गणित.एच>
#include <math.h>
#सम्मिलित  <stdio.h>
#include <stdio.h>


// फंक्शन एक तर्क के रूप में एक फ़ंक्शन पॉइंटर लेता है
// Function taking a function pointer as an argument
डबल कंप्यूट_सम (डबल (* funcp) (डबल), डबल लो, डबल हाय) {
double compute_sum(double (*funcp)(double), double lo, double hi) {
     दोहरा योग = 0.0;
     double sum = 0.0;


     // पॉइंट-टू-फ़ंक्शन '*funcp' द्वारा लौटाए गए मान जोड़ें
     // Add values returned by the pointed-to function '*funcp'
     int मैं;
     int i;
     के लिए (i = 0; i <= 100; i++) {
     for (i = 0; i <= 100; i++) {
         // फ़ंक्शन का आह्वान करने के लिए फ़ंक्शन पॉइंटर 'funcp' का उपयोग करें
         // Use the function pointer 'funcp' to invoke the function
         डबल एक्स = आई / 100.0 * (हाय - लो) + लो;
         double x = i / 100.0 * (hi - lo) + lo;
         डबल वाई = funcp (एक्स);
         double y = funcp(x);
         योग + = वाई;
         sum += y;
     }
     }
     वापसी राशि / 101.0 * (हाय - लो);
     return sum / 101.0 * (hi - lo);
}
}


डबल स्क्वायर (डबल एक्स) {
double square(double x) {
     वापसी एक्स * एक्स;
     return x * x;
}
}


पूर्णांक मुख्य (शून्य) {
int main(void) {
     दोहरी राशि;
     double  sum;


     // पॉइंट-टू-फ़ंक्शन के रूप में मानक लाइब्रेरी फ़ंक्शन 'sin ()' का उपयोग करें
     // Use standard library function 'sin()' as the pointed-to function
     योग = कंप्यूट_सम (पाप, 0.0, 1.0);
     sum = compute_sum(sin, 0.0, 1.0);
     प्रिंटफ (योग (पाप):% जी \ n, योग);
     printf("sum(sin): %g\n", sum);


     // पॉइंट-टू-फ़ंक्शन के रूप में मानक लाइब्रेरी फ़ंक्शन 'cos ()' का उपयोग करें
     // Use standard library function 'cos()' as the pointed-to function
     योग = कंप्यूट_सम (कॉस, 0.0, 1.0);
     sum = compute_sum(cos, 0.0, 1.0);
     प्रिंटफ (योग (cos):% g \ n, योग);
     printf("sum(cos): %g\n", sum);


     // यूजर-डिफ़ाइंड फ़ंक्शन 'स्क्वायर ()' को पॉइंट-टू-फ़ंक्शन के रूप में उपयोग करें
     // Use user-defined function 'square()' as the pointed-to function
     योग = कंप्यूट_सम (वर्ग, 0.0, 1.0);
     sum = compute_sum(square, 0.0, 1.0);
     प्रिंटफ (योग (वर्ग):% जी \ n, योग);
     printf("sum(square): %g\n", sum);


     वापसी 0;
     return 0;
}
}
</वाक्यविन्यास हाइलाइट>
</syntaxhighlight>


== फंक्टर्स ==
== फंक्टर्स ==
{{main|Function object}}
{{main|फंक्शन ऑब्जेक्ट}}
फ़ंक्टर, या फ़ंक्शन ऑब्जेक्ट, फ़ंक्शन पॉइंटर्स के समान हैं, और समान तरीकों से उपयोग किए जा सकते हैं। एक फ़ंक्टर एक वर्ग प्रकार का एक ऑब्जेक्ट है जो [[फ़ंक्शन-कॉल ऑपरेटर]] को प्रयुक्त करता है, ऑब्जेक्ट को फ़ंक्शन कॉल के समान सिंटैक्स का उपयोग करके एक्सप्रेशन के अंदर उपयोग करने की अनुमति देता है। फ़ंक्टर साधारण फ़ंक्शन पॉइंटर्स की तुलना में अधिक शक्तिशाली होते हैं, अपने स्वयं के डेटा मान रखने में सक्षम होते हैं, और प्रोग्रामर को [[क्लोजर (कंप्यूटर प्रोग्रामिंग)]] का अनुकरण करने की अनुमति देते हैं। कॉलबैक फ़ंक्शन के रूप में सदस्य फ़ंक्शन का उपयोग करना आवश्यक होने पर उन्हें कॉलबैक फ़ंक्शन के रूप में भी उपयोग किया जाता है।<ref>{{cite web
फ़ंक्टर, या फ़ंक्शन ऑब्जेक्ट, फ़ंक्शन पॉइंटर्स के समान हैं, और समान विधियों से उपयोग किए जा सकते हैं। फ़ंक्टर वर्ग प्रकार का ऑब्जेक्ट है जो [[फ़ंक्शन-कॉल ऑपरेटर]] को प्रयुक्त करता है, ऑब्जेक्ट को फ़ंक्शन कॉल के समान सिंटैक्स का उपयोग करके एक्सप्रेशन के अंदर उपयोग करने की अनुमति देता है। फ़ंक्टर साधारण फ़ंक्शन पॉइंटर्स की तुलना में अधिक शक्तिशाली होते हैं, अपने स्वयं के डेटा मान रखने में सक्षम होते हैं, और प्रोग्रामर को [[क्लोजर (कंप्यूटर प्रोग्रामिंग)]] का अनुकरण करने की अनुमति देते हैं। कॉलबैक फ़ंक्शन के रूप में सदस्य फ़ंक्शन का उपयोग करना आवश्यक होने पर उन्हें कॉलबैक फ़ंक्शन के रूप में भी उपयोग किया जाता है।<ref>{{cite web
| access-date = 2011-04-13
| access-date = 2011-04-13
| date = 2005-01-31
| date = 2005-01-31
Line 95: Line 91:
| title = Expertise: Intermediate Language: C++: Use Functor for Callbacks in C++
| title = Expertise: Intermediate Language: C++: Use Functor for Callbacks in C++
| quote = If you want to use a member function as a callback function, then the member function needs to be associated with an object of the class before it can be called. In this case, you can use functor [with an example on this page].
| quote = If you want to use a member function as a callback function, then the member function needs to be associated with an object of the class before it can be called. In this case, you can use functor [with an example on this page].
| url = http://www.devx.com/tips/Tip/27126}}</ref>
| url = http://www.devx.com/tips/Tip/27126}}</ref>  
कई शुद्ध वस्तु-उन्मुख भाषाएँ फ़ंक्शन पॉइंटर्स का समर्थन नहीं करती हैं। इस तरह की भाषाओं में कुछ समान प्रयुक्त किया जा सकता है, चूंकि, [[प्रोटोकॉल (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)]] के [[संदर्भ (कंप्यूटर विज्ञान)]] का उपयोग करके जो एकल [[विधि (कंप्यूटर प्रोग्रामिंग)]] (सदस्य फ़ंक्शन) को परिभाषित करता है। [[सीएलआई भाषाओं की सूची]] जैसे कि सी शार्प (प्रोग्रामिंग लैंग्वेज)|सी# और विज़ुअल बेसिक .NET इम्प्लीमेंट [[प्रकार की सुरक्षा]]|टाइप-सेफ फंक्शन पॉइंटर्स विद डेलिगेट (सीएलआई)।


अन्य भाषाओं में जो प्रथम श्रेणी के कार्यों का समर्थन करते हैं, कार्यों को डेटा के रूप में माना जाता है, और फ़ंक्शन पॉइंटर्स की आवश्यकता को समाप्त करते हुए, अन्य कार्यों द्वारा सीधे पारित किया जा सकता है, लौटाया जा सकता है और गतिशील रूप से बनाया जा सकता है।
कई शुद्ध वस्तु-उन्मुख लैंग्वेज फ़ंक्शन पॉइंटर्स का समर्थन नहीं करती हैं। इस तरह की भाषाओं में कुछ समान प्रयुक्त किया जा सकता है, चूंकि, [[प्रोटोकॉल (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)]] के [[संदर्भ (कंप्यूटर विज्ञान)]] का उपयोग करके जो एकल [[विधि (कंप्यूटर प्रोग्रामिंग)]] (सदस्य फ़ंक्शन) को परिभाषित करता है। [[सीएलआई भाषाओं की सूची]] जैसे कि सी शार्प (प्रोग्रामिंग लैंग्वेज)|सी# और विज़ुअल बेसिक .नेट इम्प्लीमेंट [[प्रकार की सुरक्षा]]|सुरक्षा प्रकार के फंक्शन पॉइंटर्स विद डेलिगेट (सीएलआई) है।


कार्यों को कॉल करने के लिए फ़ंक्शन पॉइंटर्स का व्यापक रूप से उपयोग आधुनिक प्रोसेसर पर कोड के लिए धीमा हो सकता है, क्योंकि एक [[शाखा भविष्यवक्ता]] यह पता लगाने में सक्षम नहीं हो सकता है कि कहां शाखा करना है (यह रन टाइम पर फ़ंक्शन पॉइंटर के मान पर निर्भर करता है) चूंकि इस प्रभाव को अतिरंजित किया जा सकता है क्योंकि अधिकांशतः गैर-अनुक्रमित तालिका लुकअप को अधिक कम करके इसकी भरपाई की जाती है।
अन्य भाषाओं में जो प्रथम श्रेणी के कार्यों का समर्थन करते हैं, कार्यों को डेटा के रूप में माना जाता है, और फ़ंक्शन पॉइंटर्स की आवश्यकता को समाप्त करते हुए, अन्य कार्यों द्वारा प्रत्यक्ष पारित किया जा सकता है, लौटाया जा सकता है और गतिशील रूप से बनाया जा सकता है।
 
कार्यों को कॉल करने के लिए फ़ंक्शन पॉइंटर्स का व्यापक रूप से उपयोग आधुनिक प्रोसेसर पर कोड के लिए धीमा हो सकता है, क्योंकि [[शाखा भविष्यवक्ता]] यह पता लगाने में सक्षम नहीं हो सकता है कि कहां शाखा करना है (यह कार्यसमय पर फ़ंक्शन पॉइंटर के मान पर निर्भर करता है) चूंकि इस प्रभाव को अतिरंजित किया जा सकता है क्योंकि अधिकांशतः गैर-अनुक्रमित तालिका लुकअप को अधिक कम करके इसकी आपूर्ति की जाती है।


== विधि संकेत ==
== विधि संकेत ==
C++ में ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग के लिए समर्थन सम्मिलित है, इसलिए कक्षाओं में विधि (कंप्यूटर प्रोग्रामिंग) हो सकती है (आमतौर पर सदस्य कार्यों के रूप में संदर्भित)। गैर-स्थैतिक सदस्य फ़ंक्शंस (इंस्टेंस मेथड्स) में एक निहित पैरामीटर ([[यह (कंप्यूटर प्रोग्रामिंग)]] पॉइंटर) होता है, जो उस ऑब्जेक्ट के लिए पॉइंटर होता है, जिस पर यह काम कर रहा है, इसलिए ऑब्जेक्ट के प्रकार को प्रकार के हिस्से के रूप में सम्मिलित किया जाना चाहिए। समारोह सूचक। विधि का उपयोग उस वर्ग के ऑब्जेक्ट पर पॉइंटर-टू-सदस्य ऑपरेटरों में से एक का उपयोग करके किया जाता है: <code>.*</code> या <code>->*</code> (किसी वस्तु या वस्तु के सूचक के लिए क्रमशः)।{{Dubious|date=December 2022}}
सी ++ में ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग के लिए समर्थन सम्मिलित है, इसलिए कक्षाओं में विधि (कंप्यूटर प्रोग्रामिंग) हो सकती है (सामान्यतः सदस्य कार्यों के रूप में संदर्भित)। गैर-स्थैतिक सदस्य फ़ंक्शंस (इंस्टेंस मेथड्स) में निहित पैरामीटर ([[यह (कंप्यूटर प्रोग्रामिंग)]] पॉइंटर) होता है, जो उस ऑब्जेक्ट के लिए पॉइंटर होता है, जिस पर यह काम कर रहा है, इसलिए ऑब्जेक्ट के प्रकार को प्रकार के हिस्से के रूप में सम्मिलित किया जाना चाहिए। फ़ंक्शन सूचक। विधि का उपयोग उस वर्ग के ऑब्जेक्ट पर पॉइंटर-टू-सदस्य ऑपरेटरों में से एक का उपयोग करके किया जाता है: <code>.*</code> या <code>->*</code> (किसी वस्तु या वस्तु के सूचक के लिए क्रमशः)।
चूंकि सी और सी ++ में फ़ंक्शन पॉइंटर्स को साधारण पते के रूप में प्रयुक्त किया जा सकता है, जिससेसामान्यतः <code>sizeof(Fx)==sizeof(void *)</code>, सी ++ में सदस्य पॉइंटर्स को कभी-कभी वसा पॉइंटर्स के रूप में कार्यान्वित किया जाता है, आमतौर पर वर्चुअल विधियों और वर्चुअल विरासत से निपटने के लिए एक साधारण फ़ंक्शन पॉइंटर के आकार के दो या तीन गुना{{Citation needed|date=August 2011}}.


== सी ++ == में
चूंकि सी और सी ++ में फ़ंक्शन पॉइंटर्स को साधारण पते के रूप में प्रयुक्त किया जा सकता है, जिससे सामान्यतः <code>sizeof(Fx)==sizeof(void *)</code>, सी ++ में सदस्य पॉइंटर्स को कभी-कभी वसा पॉइंटर्स के रूप में कार्यान्वित किया जाता है, सामान्यतः वर्चुअल विधियों और वर्चुअल विरासत से निपटने के लिए साधारण फ़ंक्शन पॉइंटर के आकार के दो या तीन गुना होता है.
C++ में, C में उपयोग की जाने वाली विधि के अतिरिक्त, C++ मानक लाइब्रेरी क्लास टेम्पलेट का उपयोग करना भी संभव है {{mono|std::function}}, जिनमें से उदाहरण फ़ंक्शन ऑब्जेक्ट हैं:


<वाक्यविन्यास लैंग = सीपीपी>
==== सी ++ में ====
#सम्मिलित  <iostream>
सी ++ में, सी में उपयोग की जाने वाली विधि के अतिरिक्त, सी ++ मानक लाइब्रेरी क्लास टेम्पलेट का उपयोग करना भी संभव है {{mono|std::function}}, जिनमें से उदाहरण फ़ंक्शन ऑब्जेक्ट हैं:<syntaxhighlight>
#सम्मिलित  <कार्यात्मक>
#include <iostream>
#include <functional>


स्टेटिक डबल डेरिवेटिव (स्थिरांक एसटीडी :: फ़ंक्शन <डबल (डबल)> और एफ, डबल एक्स 0, डबल ईपीएस) {
static double derivative(const std::function<double(double)> &f, double x0, double eps) {
     डबल ईपीएस2 = ईपीएस / 2;
     double eps2 = eps / 2;
     डबल लो = x0 - ईपीएस 2;
     double lo = x0 - eps2;
     डबल हाई = x0 + ईपीएस2;
     double hi = x0 + eps2;
     रिटर्न (एफ(हाय) - एफ(लो)) / ईपीएस;
     return (f(hi) - f(lo)) / eps;
}
}


स्टेटिक डबल एफ (डबल एक्स) {
static double f(double x) {
     वापसी एक्स * एक्स;
     return x * x;
}
}


मुख्य प्रवेश बिंदु() {
int main() {
     डबल एक्स = 1;
     double x = 1;
     std::cout << d/dx(x ^ 2) [@ x = << x << ] = << व्युत्पन्न (f, x, 1e-5) << std::endl;
     std::cout << "d/dx(x ^ 2) [@ x = " << x << "] = " << derivative(f, x, 1e-5) << std::endl;
     वापसी 0;
     return 0;
}
}
</वाक्यविन्यास हाइलाइट>
</syntaxhighlight>


=== सी ++ === में सदस्य कार्यों के लिए
==== सी ++ में सदस्य कार्यों के लिए ====
{{See also|#Alternate C and C++ Syntax}}
{{See also|#वैकल्पिक सी और सी ++ सिंटेक्स}}
कक्षाओं या स्ट्रक्चर्स के सदस्य कार्यों से निपटने के समयसी ++ फ़ंक्शन पॉइंटर्स का उपयोग करता है। इन्हें ऑब्जेक्ट पॉइंटर या इस कॉल का उपयोग करके बुलाया जाता है। वे इस प्रकार सुरक्षित हैं कि आप उस प्रकार के सूचक का उपयोग करके केवल उस वर्ग (या डेरिवेटिव) के सदस्यों को कॉल कर सकते हैं। यह उदाहरण सादगी के लिए जोड़े गए सदस्य फ़ंक्शन के सूचक के लिए टाइपपीफ के उपयोग को भी प्रदर्शित करता है। स्थैतिक सदस्य कार्यों के लिए फ़ंक्शन पॉइंटर्स पारंपरिक 'सी' शैली में किए जाते हैं क्योंकि इस कॉल के लिए कोई ऑब्जेक्ट पॉइंटर आवश्यक नहीं है।


<वाक्यविन्यास लैंग = सीपीपी>
कक्षाओं या स्ट्रक्वेरिएबल्स के सदस्य कार्यों से निपटने के समय सी ++ फ़ंक्शन पॉइंटर्स का उपयोग करता है। इन्हें ऑब्जेक्ट पॉइंटर या इस कॉल का उपयोग करके बुलाया जाता है। वे इस प्रकार सुरक्षित हैं कि आप उस प्रकार के सूचक का उपयोग करके केवल उस वर्ग (या डेरिवेटिव) के सदस्यों को कॉल कर सकते हैं। यह उदाहरण सादगी के लिए जोड़े गए सदस्य फ़ंक्शन के सूचक के लिए टाइपपीफ के उपयोग को भी प्रदर्शित करता है। स्थैतिक सदस्य कार्यों के लिए फ़ंक्शन पॉइंटर्स पारंपरिक 'सी' शैली में किए जाते हैं क्योंकि इस कॉल के लिए कोई ऑब्जेक्ट पॉइंटर आवश्यक नहीं है।<syntaxhighlight>
#सम्मिलित  <iostream>
#include <iostream>
नेमस्पेस एसटीडी का उपयोग करना;
using namespace std;


कक्षा फू {
class Foo {


जनता:
public:
     इंट ऐड (इंट आई, इंट जे) {
     int add(int i, int j) {
         वापसी मैं + जे;
         return i+j;
     }
     }
     इंट मल्टी (इंट आई, इंट जे) {
     int mult(int i, int j) {
         वापसी आई * जे;
         return i*j;
     }
     }
     स्टेटिक इंट नेगेट (इंट आई) {
     static int negate(int i) {
         वापसी -मैं;
         return -i;
     }
     }
};
};


int bar1 (int i, int j, Foo* pFoo, int(Foo::*pfn)(int,int)) {
int bar1(int i, int j, Foo* pFoo, int(Foo::*pfn)(int,int)) {
     वापसी (पीएफयू -> * पीएफएन) (आई, जे);