【1】C++中对象作为形式参数

基于目前的知识而言,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:

  • 对象名访问数据成员: [对象].数据成员
    对象的指针访问数据成员:[指针]->数据成员

  • 传入时形参为&(取地址)+[对象]


版权声明:本文为ba_root原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。