C++传值问题

来源:百度知道 编辑:UC知道 时间:2024/06/14 13:11:49
#include <iostream>
using namespace std;
class MyClass{
int val;
public:
MyClass(int i){ val=i; }
int getval(){ return val; }
void setval(int i){ val=i; }
};
void display(MyClass ob){ cout<<ob.getval()<<endl; }
void change1(MyClass ob){ ob.setval(50); }
void change2(MyClass & ob){ ob.setval(50); }
void change3(MyClass * ob){ ob->setval(100); }

void main(){
MyClass a(10);
cout<<"Value of a before calling change -----";
display(a);
change1(a);
cout<<"Value of a after calling change1()-----";
display(a);
change2(a);
cout<<"Value of a after calling change2()-----";
display(a);
change3(&a);
cout<<"Value of a after calling change3()-----";
display(a);
}

结果是
Value of a before calling change --

void change1(MyClass ob){ ob.setval(50); }
===========================================

change1(a); 的实际操作是:

void change1()
{
MyClass ob = a;
ob.setval(50); //ob 只是a的一个拷贝
}

ob 只是a的一个拷贝, 不会更改a的值。

但是对于指针和引用,当然可以改变a的值了

MyClass & ob = a; //所谓引用,就相当于别名,看成是同一个东西
ob.setval(50); //即 a.setval(50);

MyClass * ob = &a; //ob就是a的地址
ob->setval(100); //就相当a.setval(100);

建议你看一下函数传参数问题,传值,传址,传引用。传对象也与其他类型类似(如 int,char等),都是一个道理。

值传递是不会改变原值的,只有引用传递和指针传递才能。更详细的搜索一下:【值传递】