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

C++ में RTTI (रन-टाइम टाइप इन्फॉर्मेशन)

परिचय

इस खंड में हम देखेंगे कि C++ में RTTI (रनटाइम टाइप इन्फॉर्मेशन) क्या है। C++ में RTTI एक तंत्र है, जो रनटाइम के दौरान किसी ऑब्जेक्ट के डेटाटाइप के बारे में जानकारी उजागर करता है। यह सुविधा केवल तभी उपलब्ध हो सकती है जब क्लास में कम से कम एक वर्चुअल फ़ंक्शन हो। यह प्रोग्राम निष्पादित होने पर ऑब्जेक्ट के प्रकार को निर्धारित करने की अनुमति देता है।

निम्नलिखित उदाहरण में पहला कोड काम नहीं करेगा। यह "cannot dynamic_cast base_ptr (of type Base*) to type 'class Derived*' (Source type is not polymorphic)" जैसी त्रुटि उत्पन्न करेगा। यह त्रुटि आती है क्योंकि इस उदाहरण में कोई वर्चुअल फ़ंक्शन नहीं है।

उदाहरण कोड (बिना वर्चुअल फ़ंक्शन)

#include <iostream>
using namespace std;

class Base { };
class Derived: public Base {};

int main() {
    Base *base_ptr = new Derived;
    Derived *derived_ptr = dynamic_cast<Derived*>(base_ptr);
    if (derived_ptr != NULL)
        cout << "यह काम कर रहा है";
    else
        cout << "Base* को Derived* में कास्ट नहीं कर सकते";
    return 0;
}

अब एक वर्चुअल मेथड जोड़ने के बाद, यह काम करेगा।

उदाहरण कोड (वर्चुअल फ़ंक्शन के साथ)

#include <iostream>
using namespace std;

class Base {
    virtual void function() {
        // खाली फ़ंक्शन
    }
};
class Derived: public Base {};

int main() {
    Base *base_ptr = new Derived;
    Derived *derived_ptr = dynamic_cast<Derived*>(base_ptr);
    if (derived_ptr != NULL)
        cout << "यह काम कर रहा है";
    else
        cout << "Base* को Derived* में कास्ट नहीं कर सकते";
    return 0;
}

आउटपुट

यह काम कर रहा है
  1. - C++ में स्ट्रक्चर बनाम क्लास

    C++ में स्ट्रक्चर और क्लास मूल रूप से समान हैं। लेकिन कुछ मामूली अंतर हैं। ये अंतर नीचे दिए गए हैं। क्लास के सदस्य डिफ़ॉल्ट रूप से प्राइवेट होते हैं, लेकिन स्ट्रक्चर के सदस्य पब्लिक होते हैं। आइए इन दो कोड्स को देखें ताकि अंतर देख सकें। उदाहरण कोड #include <iostream> using namespace std; clas

  1. - C++ में बेस और डेराइव्ड क्लास एक्सेप्शन पकड़ना

    बेस और डेराइव्ड दोनों क्लास के एक्सेप्शन को पकड़ने के लिए, डेराइव्ड क्लास के कैच ब्लॉक को बेस क्लास से पहले रखना आवश्यक है। अन्यथा, डेराइव्ड क्लास का कैच ब्लॉक कभी नहीं पहुंचेगा। एल्गोरिदम शुरुआत क्लास B घोषित करें क्लास D घोषित करें जो क्लास B को इनहेरिट करती है क्लास D का ऑब्जेक्ट घोष

  1. - C++ में लोकल क्लास (Local Class)

    लोकल क्लास क्या है? एक फ़ंक्शन के अंदर घोषित क्लास को लोकल क्लास कहते हैं क्योंकि यह उस फ़ंक्शन के लिए स्थानीय (local) होती है। बेसिक उदाहरण #include <iostream> using namespace std; void func() { class LocalClass { }; } int main() { return 0; } नियम और प्रतिबंध लोकल क्लास का नाम