基于目前的知识而言,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:
-
对象名访问数据成员: [对象].数据成员
对象的指针访问数据成员:[指针]->数据成员 -
传入时形参为&(取地址)+[对象]
本文探讨了C++中对象作为函数参数时的传递方式。默认情况下,对象是以值传递的方式,这意味着在函数内部对对象的修改不会影响到原始对象。为了保存对象状态的更改,需要使用指针或者引用传递。通过传入对象的指针,函数可以修改实际对象的成员。示例代码展示了如何通过指针传递实现这一目的。
75万+

被折叠的 条评论
为什么被折叠?



