读书人

一个棘手的传值有关问题

发布时间: 2012-03-18 13:55:38 作者: rapoo

一个棘手的传值问题?
#include<stdio.h>
#include<iostream>
using namespace std;
class A
{

public:
inti;
A()
{
i=0;
}
void fun(class A a)
{
a.i=3; //赋为3
}
};

void main()
{
class A a;
a.i = 1;
a.fun(a);
cout<<a.i; //为什么这里输出还是1呢?
}

请教大家 对象传递的是引用,那为什么a.i的值不变呢

[解决办法]
你那里传递的是引用,你是传值。


void fun(class A& a)

[解决办法]
这样就可以输出3
void fun(class A a)
{
this->i = 3; //赋为3
//a.i = 3;
}
[解决办法]
原先调用a.fun(a)

void fun(class A a)
{
a.i=3; //赋为3
}

这里只是把参数a的i变为3,而不是把调用fun的a对象的i变为3

[解决办法]
显然应该传递引用.不然就是传递的值. 不然只是构造了一个副本
[解决办法]
class A
{

public:
int i;
A()
{
i=0;
}
void fun(class A a)
{
a.i=3; //赋为3
} // 随着}, a的生命周期结束, 并没对成员变量i产生任何影响,如想通过成员函数改变成员变量i的值,可以对i直接赋值,i = 3;(赋为3)或i = a.i;(赋值为a.i)

};

[解决办法]
用指针和引用都可以
[解决办法]
你传递的是 “数值”, 在函数中它仅仅是一次拷贝而已!
[解决办法]
显然了,this指的是当前的类,
你的是传值操作,要想修改传进去的变量,就得用引用&或者指针*。
[解决办法]
在A的构造中加个断点或者输出,自己跟踪一下就知道问题所在了。
[解决办法]
楼主的错误很明显,我就不说啥了,基本上看看楼上的几位说法即可

问题是2楼:一个全局函数那里来的this指针?语法都错了哦

读书人网 >C++

热点推荐