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

सी ++ इंस्टोफ के बराबर

सी ++ में किसी ऑब्जेक्ट की जांच करने के लिए कोई सीधी विधि नहीं है, कुछ वर्ग प्रकार का उदाहरण है या नहीं। Java में हमें इस तरह की सुविधा मिल सकती है।

C++11 में, हम is_base_of नामक एक आइटम ढूंढ सकते हैं। यह जाँच करेगा कि दिया गया वर्ग दिए गए ऑब्जेक्ट का आधार है या नहीं। लेकिन, यह सत्यापित नहीं करता है कि दिया गया वर्ग उदाहरण उस फ़ंक्शन का उपयोग करता है या नहीं।

dynamic_cast (expression) का उपयोग करके "instof" जैसी निकटतम संभव कार्यक्षमता प्राप्त की जा सकती है . यह दिए गए मान को निर्दिष्ट प्रकार में गुप्त करने का प्रयास करता है और परिणाम देता है। यदि कास्ट असफल है तो यह एक शून्य सूचक देता है। यह केवल पॉलीमॉर्फिक पॉइंटर्स के लिए काम करता है और जब कंपाइलर RTTI सक्षम होता है।

उदाहरण कोड

#include <iostream>
using namespace std;

template<typename Base, typename T>
inline bool instanceof(const T *ptr) {
   return dynamic_cast<const Base*>(ptr) != nullptr;
}

class Parent {
   public:
   virtual ~Parent() {}
   virtual void foo () { std::cout << "Parent\n"; }
};

class Child : public Parent {
   public:
   virtual void foo() { std::cout << "Child\n"; }
};

class AnotherClass{};
   int main() {

   Parent p;
   Child c;
   AnotherClass a;

   Parent *ptr1 = &p;
   Child *ptr2 = &c;
   AnotherClass *ptr3 = &a;

   if(instanceof<Parent>(ptr1)) {
      cout << "p is an instance of the class Parent" << endl;
   } else {
      cout << "p is not an instance of the class Parent" << endl;
   }

   if(instanceof<Parent>(ptr2)) {
      cout << "c is an instance of the class Parent" << endl;
   } else {
      cout << "c is not an instance of the class Parent" << endl;
   }

   if(instanceof<Child>(ptr2)) {
      cout << "c is an instance of the class Child" << endl;
   } else {
      cout << "c is not an instance of the class Child" << endl;
   }

   if(instanceof<Child>(ptr1)) {
      cout << "p is an instance of the class Child" << endl;
   } else {
      cout << "p is not an instance of the class Child" << endl;
   }

   if(instanceof<AnotherClass>(ptr2)) {
      cout << "c is an instance of AnotherClass class" << endl;
   } else {
      cout << "c is not an instance of AnotherClass class" << endl;
   }
}

आउटपुट

p is an instance of the class Parent
c is an instance of the class Parent
c is an instance of the class Child
p is not an instance of the class Child
c is not an instance of AnotherClass class

  1. C++ में एकाधिक वंशानुक्रम

    एकाधिक वंशानुक्रम तब होता है जब एक वर्ग एक से अधिक आधार वर्ग से विरासत में मिलता है। तो वर्ग एकाधिक वंशानुक्रम का उपयोग करके कई आधार वर्गों से सुविधाओं को प्राप्त कर सकता है। यह ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग लैंग्वेज जैसे C++ की एक महत्वपूर्ण विशेषता है। एक आरेख जो एकाधिक वंशानुक्रम प्रदर्शित करता

  1. C++ फ्रेंड कीवर्ड का C# समतुल्य क्या है?

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

  1. सी # में बिगइंटर क्लास

    C# में बड़ी संख्या को संभालने के लिए BigInteger का उपयोग करें। BigInteger के लिए जोड़ने के लिए असेंबली System. अंक. C# में System.Numerics.BigInteger में बड़ा पूर्णांक पाया जाता है। सिंटैक्स बिगइंटर का सिंटैक्स - [SerializableAttribute] public struct BigInteger : IFormattable, IComparable, ICompara