请问为什么第四行输出为5??t.a++不是已经将obj1的a变成6了吗??

请问为什么第四行输出为5??t.a++不是已经将obj1的a变成6了吗??

问题描述:

#include

using namespace std;
class A
{
public:
A(){a=5;}
void printa(){cout<<"A:a="<<a<<endl;}
public:
int a;
friend class B;
};
class B
{
public:
void display1(A t)
{
t.a++;cout<<"display1:a="<<t.a<<endl;
}
void display2(A t)
{
t.a--;cout<<"display2:a="<<t.a<<endl;
}
};
int main()
{
A obj1;
B obj2;
cout<<obj1.a<<endl;
obj1.printa();
obj2.display1(obj1);
cout<<obj1.a<<endl;
obj2.display2(obj1);
obj1.printa();
return 0;
}
输出结果:
5
A:a=5
display1:a=6
5
display2:a=4
A:a=5

你只是修改了它的一个拷贝,并不会影响原来的值,改用引用或指针传参

class B
{
public:
    void display1(A& t)
    {
        t.a++; cout << "display1:a=" << t.a << endl;
    }
    void display2(A& t)
    {
        t.a--; cout << "display2:a=" << t.a << endl;
    }
};

楼上说的对,用指针直接访问对应的内存地址才能改变对应的变量,copy出来的,相当于一个新变量了。