Jason Baker Jason Baker - 1 year ago 65
C++ Question

Can I access private members from outside the class without using friends?


Yes, I am fully aware that what I am asking about is totally stupid and that anyone who would wish to try such a thing in production code should be fired and/or shot. I'm mainly looking to see if can be done.

Now that that's out of the way, is there any way to access private class members in C++ from outside the class? For example, is there any way to do this with pointer offsets?

(Naive and otherwise non-production-ready techniques welcome)


As noted in the comments, I asked this question because I wanted to write a blog post on over-encapsulation (and how it affects TDD). I wanted to see if there was a way to say "using private variables isn't a 100% reliable way to enforce encapsulation, even in C++." At the end, I decided to focus more on how to solve the problem rather than why it's a problem, so I didn't feature some of the stuff brought up here as prominently as I had planned, but I still left a link.

At any rate, if anyone's interested in how it came out, here it is: Enemies of Test Driven Development part I: encapsulation (I suggest reading it before you decide that I'm crazy).

Answer Source

If the class contains any template member functions you can specialize that member function to suit your needs. Even if the original developer didn't think of it.


class safe
    int money;

     : money(1000000)

    template <typename T>
    void backdoor()
        // Do some stuff.


#include <safe.h>
#include <iostream>

class key;

template <>
void safe::backdoor<key>()
    // My specialization.
    money -= 100000;
    std::cout << money << "\n";

int main()
    safe s;


Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download