Search code examples
c++abstract-classfriend-class

How to access private members of an abstract class from its friend class?


class A  
{  
private:  
        int a,b,c;  
public:
        virtual int get()=0;
         friend class B;
};

class B{
//here I want to access private variables of class A that is a, b and c
};

class C:public class A
{  
        int get(){    
       //some code  
        }  
};

How to access private members of class A in class B. I cannot create an object of class A since it is abstract. I somehow have to use an object of class C to do that but how?


Solution

  • class A {
        friend class B;
    private:
        int x;
    public:
        A() : x(42) {}
    };
    
    class C : public A {
    };
    
    class B {
    public:
        int reveal_secrets(C &instance){
            // access private member
            return instance.x;
        }
    
        int reveal_secrets(){
            // access private member of instance created inside B
            C instance;
            return instance.x;
        }
    };
    
    void print_secrets(){
        C instance;
        B accessor;
        std::cout << accessor.reveal_secrets(instance) << ", " << accessor.reveal_secrets() << std::endl;
    }