在 C++ 中,将类对象作为函数形参时,实参会被传递给函数并在函数内部进行操作。如果函数中对类对象的属性进行修改,实参也会受到影响。然而,如果函数中使用了类对象的拷贝构造函数或赋值运算符重载函数,实参则不会被修改。此时,函数操作的是类对象的副本。

例如:

class MyClass {
public:
    int value;
    MyClass(int val) : value(val) {}
};

void modifyObject(MyClass obj) {
    obj.value = 10;
}

int main() {
    MyClass myObj(5);
    modifyObject(myObj);
    std::cout << myObj.value; // 输出 5
    return 0;
}

在上面的例子中,modifyObject 函数接受一个 MyClass 对象作为参数。尽管函数内部修改了 obj.value 的值,但 myObj 的值仍然保持为 5。这是因为 modifyObject 函数接收到的是 myObj 的副本,而不是 myObj 本身。

如果想要在函数内部修改实参对象,则需要使用引用或指针作为参数类型:

void modifyObject(MyClass& obj) {
    obj.value = 10;
}

使用引用传递参数时,函数直接操作实参对象,因此修改会影响到实参。

需要注意的是,当使用拷贝构造函数或赋值运算符重载函数时,函数会创建一个新的对象副本。如果函数内部对副本进行修改,不会影响到原始对象。

总结:

  • 默认情况下,将类对象作为函数参数传递时,传递的是对象的副本。
  • 使用引用或指针可以传递对象的引用或指针,允许函数直接修改实参对象。
  • 拷贝构造函数和赋值运算符重载函数用于创建对象的副本,防止函数修改实参对象。
C++ 类对象作为函数参数:实参会改变吗?

原文地址: https://www.cveoy.top/t/topic/n2s8 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录