C++|向函数传递对象

在 C++ 里,对象作为函数的参数和返回值,有值传递、指针传递和引用传递这三种传递方式,下面为你详细介绍。

1.值传递

在值传递时,把实参对象的值复制给形参对象,函数会接收实参的一个副本,而非实参本身。函数内对形参的修改不会影响到实参。

#include 
using namespace std;
class MyClass {
public:
    int value;
    MyClass(int val) : value(val) {}
};

// 值传递
void modifyValue(MyClass obj) {
    obj.value = 20;
}

int main() {
    MyClass obj(10);
    modifyValue(obj);
    cout << "Value after modification: " << obj.value << endl; // 输出 10
    return 0;
}

 但是对象占用内存都比较大,一般都不传对象本身,而改为传对象引用或者对象指针。

2.指针传递

指针传递时,函数接收的是实参的地址。通过指针,函数能够直接修改实参对象。

#include 
using namespace std;
class MyClass {
public:
    int value;
    MyClass(int val) : value(val) {}
};

// 指针传递
void modifyValue(MyClass* objPtr) {
    if (objPtr != nullptr) {
        objPtr->value = 20;
    }
}

int main() {
    MyClass obj(10);
    modifyValue(&obj);
    cout << "Value after modification: " << obj.value << endl; // 输出 20
    return 0;
}

3.引用传递

函数接收的是实参的引用,也就是实参的别名。函数内对引用的修改会直接影响到实参。

使用对象引用作为函数参数最常见,它不但有指针作为参数的优点,而且比指针作为参数更简单、更方便。 

#include 
using namespace std;
class MyClass {
public:
    int value;
    MyClass(int val) : value(val) {}
};

// 引用传递
void modifyValue(MyClass& objRef) {
    objRef.value = 20;
}

int main() {
    MyClass obj(10);
    modifyValue(obj);
    cout << "Value after modification: " << obj.value << endl; // 输出 20
    return 0;
}

4.三种传递方式比较

从代码效率上看,用对象值传递的方式的效率相对低一些,它需要创建新的对象来接收实参传来的值,用指针或者引用效率更高。

值传递较为安全,不会影响原始对象;指针传递和引用传递能直接修改原始对象,不过使用指针时需要注意空指针的情况。引用比指针使用起来更加简洁,方便,在C++中更常用。当然如果实参数据不能被修改,可以(应该)在前面加上const所以一般更建议用引用。

你可能感兴趣的:(C++程序设计,c++,开发语言)