कार्यों के लिए वस्तुओं को पारित करने के चार तरीके हैं। मान लेते हैं कि आपके पास कक्षा X है और आप इसे फंक्शन फन में पास करना चाहते हैं, फिर -
मूल्य से गुजरें
यह फ़ंक्शन स्कोप में ऑब्जेक्ट की उथली स्थानीय प्रतिलिपि बनाता है। जिन चीज़ों को आप यहाँ संशोधित करते हैं, वे उसे पास की गई वस्तु में दिखाई नहीं देंगी। उदाहरण के लिए,
घोषणा
void fun(X x);
कॉल करना
X x; fun(x);
संदर्भ द्वारा पास करें
यह फ़ंक्शन के लिए ऑब्जेक्ट का संदर्भ पास करता है। आपके द्वारा यहां संशोधित की जाने वाली चीजें इसे पास की गई वस्तु में दिखाई देंगी। वस्तु की कोई प्रतिलिपि नहीं बनाई गई है। उदाहरण के लिए,
घोषणा
void fun(X &x);
कॉल करना
X x; fun(x);
कॉन्स्ट संदर्भ द्वारा पास करें
यह फ़ंक्शन के ऑब्जेक्ट के लिए एक कॉन्स्ट संदर्भ पास करता है। आप यहां सीधे ऑब्जेक्ट को संशोधित/पुन:असाइन नहीं कर सकते हैं (आप इसके तरीकों का उपयोग कर सकते हैं जो ऐसा करते हैं)। यह उपयोगी है यदि आप चाहते हैं कि फ़ंक्शन में ऑब्जेक्ट की केवल एक पठनीय प्रति हो। वस्तु की कोई प्रतिलिपि नहीं बनाई गई है। उदाहरण के लिए,
घोषणा
void fun(X const &x);
कॉल करना
X x; fun(x);
कॉन्स्ट पॉइंटर से गुजरें
यह ऑब्जेक्ट को फ़ंक्शन में एक कॉन्स्ट पॉइंटर पास करता है। आप यहां पॉइंटर को संशोधित/पुन:असाइन नहीं कर सकते। यह उपयोगी है यदि आप चाहते हैं कि फ़ंक्शन पॉइंटर में केवल इस ऑब्जेक्ट का पता हो। वस्तु की कोई प्रतिलिपि नहीं बनाई जाती है। उदाहरण के लिए,
घोषणा
void fun(X const *x);
कॉल करना
X x; fun(&x);
कॉन्स्ट पॉइंटर से गुजरें
यह ऑब्जेक्ट को फ़ंक्शन में पॉइंटर पास करता है। यह वस्तु के संदर्भ को पारित करने के समान है। वस्तु की कोई प्रतिलिपि नहीं बनाई जाती है। उदाहरण के लिए,
घोषणा
void fun(X *x);
कॉल करना
X x; fun(&x);