I have the following code:
class A
{
private:
int x;
public:
A()
{
x = 90;
}
A(A a1, A a2)
{
a1.x = 10;
a2.x = 20;
}
int getX()
{
return this->x;
}
};
I know that code might be weird but I don't understand why a1
and a2
can access private data member x
?
The private modifier specifies that the member can only be accessed in its own class. The protected modifier specifies that the member can only be accessed within its own package (as with package-private) and, in addition, by a subclass of its class in another package.
That makes the difference to whether the access is "by the object". Unless main() is the name of a function of 'Car' I don't understand why you think it's attempt at accessing the width variable qualifies in the statement, "...private members could be accessed by the object of the class to which they belong."
Private means "private to the class", NOT "private to the object". So two objects of the same class could access each other's private data.
Any method within your class can access the private data of any instance of that class; there's not a way to keep data private to within an instance unless you forbid methods that explicitly access private data members of other instances.
Good question. The point is that protection in C++ is class level, not object level. So a method being invoked on one object can access private members of any other instance of the same class.
This makes sense if you see the role of protection being to allow encapsulation to ensure that the writer of a class can build a cohesive class, and not have to protect against external code modifying object contents.
Another thought as to the real "why?". Consider how you write almost any copy constructor; you want access to the original's underlying data structure, not its presented interface.
Any member function of the class as well as the constructors can access the private data. That is the private members of the instance object the method is called on or the private members of other instances.
In this case it's the constructor and it's other instances (namely a1, a2).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With