Vladimir Yanakiev
Vladimir Yanakiev

Reputation: 1300

Access to specific private members from specific class

I have a class

class A
{
.....
private:
    int mem1;
    int mem2;
}

I have another class B which need to access only to mem1.

class B
{
  ....
}

How can I access private member mem1 from only from class B? I don't want to use friend. This means access to all private members.

Upvotes: 0

Views: 47

Answers (2)

EFenix
EFenix

Reputation: 831

You can write a base class with member mem1 and friend B

class Base {
   protected:
   int mem1;
   friend class B;
};

class A: private Base {
  // ...
};

Upvotes: 3

Bathsheba
Bathsheba

Reputation: 234635

With some rearrangement to class A (which might not necessarily be acceptable), you can achieve this:

class Base
{
    friend class B;
    int mem1;
};

class A : public Base
{
    int mem2;
};

This exploits the fact that friendship is not transitive through inheritance.

Then, for class B,

class B
{
    void foo(A& a)
    {
        int x = a.mem1; // allowed
        int y = a.mem2; // not allowed    
    }
};

Upvotes: 4

Related Questions