基于目前的知识而言,C++中一个函数的形式参数传递主要分为两种类型:值传递和指针传递。
那么对象作为形参时是哪种传递呢?
可想而知,对象是引用数据类型,指向了其类下的数据成员和方法成员。
我们又知道,值传递相当与将变量的等值复制作为参数传入函数,函数内对其修改并不会影响传入值。
相反地,当传入参数为指针时,改变其指向的数据,往往会使得传入指针的指向数据成员发生变化。(如数组等)
但是当对象作为形式参数时,其虽然是指针传递,却不会保存其改变的值。
(C++14下):
class fun{
public:
int i;
};
void test0(fun f){
f.i++;
}
int main() {
fun f1;
f1.i=0;
test0(f1);
cout<<f1.i<<endl;
}
输出:0
那么,要如何写程序,能够保存更改呢?
很简单,将传入形参改为对象的地址即可。
更改后如下:
class fun{
public:
int i;
};
void test0(fun* f){
f->i++;
}
int main() {
fun f1;
f1.i=0;
test0(&f1);
cout<<f1.i<<endl;
}
输出:1
就可以保存对对象中数据成员的更改了。
tips:
-
对象名访问数据成员: [对象].数据成员
对象的指针访问数据成员:[指针]->数据成员 -
传入时形参为&(取地址)+[对象]