2012-07-21 13 views
6

तो मैं सी ++ में वर्चुअल फ़ंक्शंस की अवधारणा के लिए नया हूं, और this जैसे धागे इस अवधारणा को बेचने का अच्छा काम करते हैं। ठीक है मैं आश्वस्त हूँ।सी ++ में आभासी कार्यों को 'वर्चुअल' कहा जाता है?

लेकिन आभासी कार्यों को 'आभासी' क्यों कहा जाता है? मेरा मतलब है कि ऐसे कार्य 'कंक्रीट' के रूप में सामान्य कार्यों/विधियों के रूप में नहीं हैं? अगर कोई इस अवधारणा को नाम देने के लिए 'आभासी' शब्द की पसंद को समझा सकता है, तो यह बहुत अच्छा होगा।

+0

@ एच 2CO3 जो किसी भी अर्थ में अधिभारित नहीं है। ओवरलोडिंग तब होती है जब एक ही नाम वाला फ़ंक्शन अलग-अलग तर्क स्वीकार करता है। – rubenvb

+0

@ रूबेनव सही - मैं अपनी टिप्पणी अपडेट करूंगा। –

+0

@ एच 2CO3 ग्रेट! जिस कारण का मैंने उल्लेख किया है वह है क्योंकि किसी के पास रनटाइम ओवरहेड होता है और दूसरा ';) नहीं होता है। – rubenvb

उत्तर

9

Virtuality, साझा करने अपने बिना कुछ की विशेषताओं होने की गुणवत्ता (वास्तविक या काल्पनिक) भौतिक रूप

^http://en.wikipedia.org/wiki/Virtual

एक C++ आभासी समारोह एक साधारण समारोह प्रतीत होता है (" ") के गुण होने पर, लेकिन कार्यान्वयन जिसे कॉल किया जाएगा, घोषणा के माध्यम से या उस मामले के लिए इनलाइन कार्यान्वयन के माध्यम से साझा नहीं किया जाता है।

+0

उत्तर के लिए धन्यवाद। क्या आप घोषणा कर सकते हैं कि 'घोषणा के माध्यम से साझा नहीं किया गया' से आपका क्या मतलब है? – curiousexplorer

+0

"घोषणा के माध्यम से साझा नहीं किया गया" का अर्थ है कि जानकारी प्रदान नहीं की जाती है। घोषणा इस बारे में कोई जानकारी नहीं देती है कि फ़ंक्शन के किसी दिए गए (आभासी) कॉल द्वारा कौन सा कार्यान्वयन कहा जाएगा। कॉल को अर्हता प्राप्त करना संभव है ताकि कॉल वर्चुअल न हो, उदा। 'p-> SomeClass :: aMethod()', लेकिन इस मामले में 'AMethod' की घोषणा' SomeClass' 'आपको यह नहीं बताती कि कौन सा कार्यान्वयन कहा जाएगा। एक अपवाद है, अर्थात् एक सी ++ 11 'अंतिम' विधि, जिसे ओवरराइड नहीं किया जा सकता है, जब 'अंतिम' संस्करण भी विधि का मूल परिचय है। लेकिन यह पेटोलॉजिकल है ... –

+0

कोई जानकारी देने के बारे में यह बयान गैर-आभासी गैर-इनलाइन सदस्य फ़ंक्शंस और वास्तव में अधिकांश कार्यों पर भी लागू होता है। सी ++ में वर्चुअल फ़ंक्शन विशेष रूप से ऑब्जेक्ट के रन-टाइम प्रकार पर प्रेषण के लिए संदर्भित होते हैं। – Bryan

6

'वर्चुअल फ़ंक्शन' का अर्थ एक सदस्य फ़ंक्शन है जहां विशिष्ट कार्यान्वयन रन-टाइम पर ऑब्जेक्ट के प्रकार पर निर्भर करेगा। ऐसा करने के लिए भाषा का संकलक और रन-टाइम समर्थन विपरीत होता है।

सी ++ में कीवर्ड 'आभासी' सिमुला से लिया गया था, जिसने बजेर्न स्ट्राउस्ट्रप को प्रभावित किया था। बहुत अधिक यहाँ पृष्ठभूमि: Pure virtual or abstract, what's in a name?

.. सिमुला 67 आम बेस भाषा (1970) .. वर्ग, वस्तु, और भी आभासी के रूप में के रूप में OO कीवर्ड लागू करने के लिए पहली भाषा हो रहा है एक औपचारिक अवधारणा।

संबंधित मुद्दे