对象指针作为函数参数和对象引用作为函数参数都比对象作为函数参数要用的更为普遍
传对象指针和传对象引用作为实参,那么实参在函数里发生了变话,那么相应的对象本身也会发生变化,二传递对象本身作为实参的话,实参发生变化,对象本身不会发生变化,因为对象指针和对象引用传给函数的实际上是所指对象的地址,而对象本身作为实参传给函数的话,则是传递对象本身的副本,和原对象没有任何关系。实例代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
class test{ public: test(int a,int b):x(a),y(b){} public: int x; int y; }; //指针来定义形参 void alterTest0(test *p) { p->x=100; p->y=100; }//引用来定义形参 void alterTest1(test &p) { p.x=200; p.y=200; }//对象本身来定义形参 void alterTest2(test p) { p.x=300; p.y=300; } int main(int argc, char* argv[]) { test t(10,10); cout<<"test t:"<<t.x<<" "<<t.y<<endl; alterTest2(t); cout<<"test t 对象本身做实参:"<<t.x<<" "<<t.y<<endl; alterTest0(&t); cout<<"test t 对象指针做实参:"<<t.x<<" "<<t.y<<endl; alterTest1(t); cout<<"test t 对象引用做实参:"<<t.x<<" "<<t.y<<endl; return 0; } |
运行结果如上图,对象本身作为实参不会改变原对象的值。
注意:注意引用传参 在调用函数并且给实参的时候,只需要给对象就行,定义了 ,就会自动取其引用。alterTest2(t);
转自:https://www.cnblogs.com/fengting/p/4439370.html