c++类与对象问题求大神解答

#include<iostream>
using namespace std;
class A
{public:
A(){a=5;}
void printa(){cout<<“A:a=”<<a<<endl;}
private:
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;
obj1.printa();
obj2.display1(obj1);
obj2.display2(obj1);
obj1.printa();
} 谁知道答案和详细点的解题步骤啊,帮帮忙,在线等
尤其是第三个数为什么是4不是5啊

因为void display1( A t)、void display2( A t)参数传递的是一个对象,而不是指针或引用,所以呢经过这一步obj2.display1(obj1);后,其实obj1.a的值并没有变化,所以下一步计算后,obj2.display2(obj1);输出的是4而不是5。

看看下面例子:

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
void fun(int n)
{
n++;
}
void fun1(int *p)
{
(*p)++;
}
void main()
{
int n = 5;
fun(n);
printf("n = %d n仍然是5\n", n);
fun1(&n);
printf("n = %d n变为6了\n", n);
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-07-08
int main()
{ A obj1;
B obj2;
obj1.printa();
obj2.display1(obj1);
obj2.display2(obj1);
obj1.printa();

这段程序表示a的初始化值在class A和class B都为5
A(){a=5;}
void printa(){cout<<“A:a=”<<a<<endl;}
这里输出第一个数a=5
void display1( A t)
{t.a++;cout<<“display1:a=”<<t.a<<endl;};
第二个数a=6
void display2( A t)
{t.a--;cout<<“display2:a=”<<t.a<<endl;};
第三个数a=4
第2个回答  2012-07-08
因为
void display1( A t)

void display2( A t)

都是简单的按位拷贝,所以只是简单地新建一个A类的对象t,对原来的对象没有影响,只是一个局部变量,函数运行结束后遇到“}”就自动析构,所以整个过程中obj1的私有成员a的值都是5,没有发生变化。
运行结果:
A:a=5
diaplay1:a=6
diaplay2:a=4

A:a=5
相似回答