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

सी ++ में डायनामिक_कास्ट और स्टेटिक_कास्ट

static_cast: इसका उपयोग सामान्य/साधारण प्रकार के रूपांतरण के लिए किया जाता है। यह निहित प्रकार के जबरदस्ती के लिए जिम्मेदार कलाकार भी है और इसे स्पष्ट रूप से भी कहा जा सकता है। आपको इसका उपयोग फ्लोट को int, char से int, आदि में परिवर्तित करने जैसे मामलों में करना चाहिए। यह संबंधित प्रकार की कक्षाओं को कास्ट कर सकता है। यदि प्रकार समान नहीं हैं तो यह कुछ त्रुटि उत्पन्न करेगा।

उदाहरण

#include<iostream>
using namespace std;
class Base {};
class Derived : public Base {};
class MyClass {};
main(){
   Derived* d = new Derived;
   Base* b = static_cast<Base*>(d); // this line will work properly
   MyClass* x = static_cast<MyClass*>(d); // ERROR will be generated during compilation
}

आउटपुट

[Error] invalid static_cast from type 'Derived*' to type 'MyClass*'

डायनामिक_कास्ट :इस कास्ट का उपयोग बहुरूपता को संभालने के लिए किया जाता है। जब आप किसी व्युत्पन्न कक्षा में कास्टिंग कर रहे हों तो आपको केवल इसका उपयोग करने की आवश्यकता होती है। जब आप बेस क्लास से डिराइव्ड क्लास में कास्ट करते हैं तो यह विशेष रूप से इनहेरिटेंस में उपयोग किया जाता है।

उदाहरण

#include<iostream>
using namespace std;
class MyClass1 {
   public:
      virtual void print()const {
         cout << "This is from MyClass1\n";
      }
};
class MyClass2 {
   public:
      virtual void print()const {
         cout << "This is from MyClass2\n";
      }
};
class MyClass3: public MyClass1, public MyClass2 {
   public:
      void print()const {
         cout << "This is from MyClass3\n";
      }
};
int main(){
   MyClass1* a = new MyClass1;
   MyClass2* b = new MyClass2;
   MyClass3* c = new MyClass3;
   a -> print();
   b -> print();
   c -> print();
   b = dynamic_cast< MyClass2*>(a); //This cast will be failed
   if (b)
      b->print();
   else
      cout << "no MyClass2\n";
   a = c;
   a -> print(); //Printing from MyClass3
   b = dynamic_cast< MyClass2*>(a); //Successfully casting is done
   if (b)
      b -> print();
   else
      cout << "no MyClass2\n";
}

आउटपुट

This is from MyClass1
This is from MyClass2
This is from MyClass3
no MyClass2
This is from MyClass3
This is from MyClass3

  1. सी++ में रेगुलर कास्ट बनाम स्टैटिक_कास्ट बनाम डायनेमिक_कास्ट

    static_cast - इसका उपयोग सामान्य/साधारण प्रकार के रूपांतरण के लिए किया जाता है। यह निहित प्रकार के जबरदस्ती के लिए जिम्मेदार कलाकार भी है और इसे स्पष्ट रूप से भी कहा जा सकता है। आपको इसका उपयोग फ्लोट को इंट, चार से इंट आदि में बदलने जैसे मामलों में करना चाहिए। डायनामिक_कास्ट - इस कास्ट का उपयोग बहु

  1. C++ में static_cast, dynamic_cast, const_cast और reinterpret_cast का उपयोग कब किया जाना चाहिए?

    const_cast एक चर को हटाने या जोड़ने के लिए इस्तेमाल किया जा सकता है। यह तब उपयोगी हो सकता है जब किसी वैरिएबल से कॉन्स्टेंस जोड़ना/निकालना आवश्यक हो। static_cast इसका उपयोग सामान्य/साधारण प्रकार के रूपांतरण के लिए किया जाता है। यह निहित प्रकार के जबरदस्ती के लिए जिम्मेदार कलाकार भी है और इसे स्पष्ट र

  1. C++ में फ्रेंड क्लास और फंक्शन

    किसी वर्ग के मित्र कार्य को उस वर्ग के दायरे से बाहर परिभाषित किया गया है लेकिन उसे कक्षा के सभी निजी और संरक्षित सदस्यों तक पहुंचने का अधिकार है। भले ही फ्रेंड फंक्शन के प्रोटोटाइप क्लास डेफिनिशन में दिखाई देते हैं, फ्रेंड्स मेंबर फंक्शन नहीं होते हैं। एक दोस्त एक फंक्शन, फंक्शन टेम्प्लेट, या मेंब