#include<iostream>
using namespace std;
class A
{
private:
int value;
public:
A(int init):value(init){}
void changevalue(A &a){a.value = 100;}//why a's value can be changed?
void printvalue(){cout << value << endl;}
};
int main(int argc , char *argv[])
{
A a(2);
A b(3);
a.changevalue(b);
b.printvalue();
return 0;
}
a is an instance of A class,with a private value named value,but why this private value can be changed? Is that the parameter list included in the scope of class?
Because class access specifier apply on per class basis and not per object basis.
You can always modify the same type of object inside the class functions.Usual examples are copy constructor and copy assignment operator.