Sponsored By

Accessing privates without 'friend'(c++)

A neat way to access privates from one class to another, without direct inheritance or friend.

Ofer Rubinstein, Blogger

January 5, 2010

1 Min Read
Game Developer logo in a gray background | Game Developer

[ From Pompi Dev Blog

Here is a neat little way I found to make one class access the privates of another class, without using friend or direct inheritance. Take a look at this code:


class A {

    public:

        class Observer {

             protected:

                 int GetPrivate(A & a) {return a.ValueA;};

        };

    private:

        int ValueA;

};

class B: public A::Observer {

    public:

        void Foo (A & a) {

             Do something with GetPrivate(a);

        }

};

 

Class B cannot access the privates of class A directly, but it inherits a subclass of A that can access the privates of A given as a parameter. Since I have just tried this "pattern" recently, I am not sure what is the direct benefit of this.

I believe a benefit can be in the sense of making a programmer's life easier. Programming languages play several parts. They provide us powerful functionality, but they also suppose to give us ease of use. You can program anything on assembly, but it would be really difficult to write a big game in assembly. If you do not expose privates via a getter, you give the programmer one less method to think about when he need to use the class's instance for something.

Can you think how you would use this "pattern"? Do you think there is no use for it? Tell me what you think.

 

Read more about:

2010Featured Blogs
Daily news, dev blogs, and stories from Game Developer straight to your inbox

You May Also Like