ओवरलोडेड << संचालक का उपयोग करके << एक अलग वर्ग में अधिभार

Dec 05 2020

तो यहाँ समस्या है। मेरे पास एक वर्ग बी है जहां मैंने ओवरलोड किया है << ऑपरेटर और एक वर्ग ए जहां << ऑपरेटर भी अतिभारित है। हालाँकि, क्लास बी में << अधिभार काम नहीं करता है << वर्ग में ए अधिभार। यह केवल बी का पता देता है जैसे कि वर्ग बी में << अधिभार मौजूद नहीं है।

किसी भी मदद को बहुत सराहा जाएगा

#pragma once
#include <ostream>

using namespace std;

class B {
public:

    B(int x) {
        this->x = x;
    }
    
    friend ostream& operator<<(ostream& os, B& b)
    {
        os << "this is B " << b.x;
        return os; 
    }

private:
    int x;
};
#pragma once
#include <ostream>
#include "B.h"

using namespace std;

class A {
public:

    A(B* b) {
        this->b = b;
        this->x = 0;
    }

    friend ostream& operator<<(ostream& os, A& a)
    {
        os << a.b << endl; //this doesnt work <============
        os << "this is a " << a.x;
        return os;
    }

private:
    int x;
    B* b;
};
#include <iostream>
#include "A.h"
#include "B.h"

using namespace std;

int main()
{
    B* b = new B(1);
    A* a = new A(b);
    cout << *a << "inside a "<< endl;
    cout << *b << "inside b " <<endl;
}

जवाब

5 SamVarshavchik Dec 05 2020 at 10:37
os << a.b // ...

a.bवह नहीं है B, जिसके लिए आपने एक अधिभार परिभाषित किया है, अपने कोड को करीब से देखें:

class A {
private:

    B* b;
};

यह एक B *, और नहीं है B, और उसके लिए कोई अधिभार मौजूद नहीं है।

यदि आप यहां अधिभार को कॉल करना चाहते हैं, तो उपयोग करें os << (*a.b) // ...;