Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

क्या सी ++ वर्चुअल फ़ंक्शंस में डिफ़ॉल्ट पैरामीटर हो सकते हैं?

हाँ, C++ वर्चुअल फ़ंक्शंस में डिफ़ॉल्ट पैरामीटर हो सकते हैं।

उदाहरण कोड

#include<iostream>
using namespace std;
class B {
   public:
      virtual void s(int a = 0) {
         cout<<" In Base \n";
      }
};

class D: public B {
   public:
      virtual void s(int a) {
         cout<<"In Derived, a="<<a;
      }
};

int main(void) {
   D d; // An object of class D
   B *b = &d;// A pointer of type B* pointing to d
   b->s();// prints"D::s() called"
   return 0;
}
की ओर इशारा करता है

आउटपुट

In Derived, a=0

इस आउटपुट में, हम देखते हैं कि, व्युत्पन्न वर्ग के s() को कहा जाता है और बेस क्लास s() के डिफ़ॉल्ट मान का उपयोग किया जाता है।

डिफ़ॉल्ट तर्क कार्यों के हस्ताक्षर में भाग नहीं लेते हैं। इसलिए बेस क्लास और व्युत्पन्न वर्ग में s () के हस्ताक्षर समान माने जाते हैं, इसलिए बेस क्लास के s () को ओवरराइड किया जाता है। संकलन समय पर डिफ़ॉल्ट मान का उपयोग किया जाता है। जब कंपाइलर जांचता है कि फ़ंक्शन कॉल में कोई तर्क गुम है, तो यह दिए गए डिफ़ॉल्ट मान को प्रतिस्थापित करता है। इसलिए, उपरोक्त कार्यक्रम में, x के मान को संकलन समय पर प्रतिस्थापित किया जाता है, और रन टाइम पर व्युत्पन्न वर्ग के s () को कहा जाता है। ए का मान संकलन समय पर प्रतिस्थापित किया जाता है, और रन टाइम व्युत्पन्न वर्ग के s() को कहा जाता है।


  1. मैं अग्रेषित घोषणा सी/सी++ का उपयोग कब कर सकता हूं?

    फॉरवर्ड डिक्लेरेशन से डिक्लेरेशन के बाद के कोड को पता चलता है कि Person नाम के साथ कुछ क्लासेज हैं। यह संकलक को संतुष्ट करता है जब वह इन नामों का उपयोग देखता है। बाद में लिंकर को कक्षाओं की परिभाषा मिल जाएगी। उदाहरण Class Person; void myFunc(Person p1) {    // ... } Class Person {  

  1. सी # में एक वर्ग में हमारे पास कितने विनाशक हो सकते हैं?

    c# में, डिस्ट्रक्टर एक वर्ग की एक विशेष विधि है और इसका उपयोग कक्षा के अंदर वस्तुओं या कक्षाओं के उदाहरणों को नष्ट करने के लिए किया जाता है। एक वर्ग के अंदर केवल एक विध्वंसक हो सकता है सी # में विनाशक के गुण निम्नलिखित हैं विध्वंसक कोई पैरामीटर नहीं लेंगे विनाशक एक टिल्ड प्रतीक (~) से शुरू

  1. डिफ़ॉल्ट वर्चुअल व्यवहार C++ और Java में कैसे भिन्न होता है?

    सी ++ में, क्लास सदस्य विधियां डिफ़ॉल्ट रूप से गैर-आभासी होती हैं। इसका मतलब है, उन्हें निर्दिष्ट करके वर्चुअल बनाया जा सकता है। दूसरी ओर, जावा में, विधियां डिफ़ॉल्ट रूप से आभासी होती हैं, और उन्हें अंतिम कीवर्ड की सहायता से गैर-आभासी बनाया जा सकता है। उदाहरण class base_class{    public v