> 백엔드 개발 > C++ > C++ 함수 호출 객체 지향 설계: 매개변수 전달 및 반환 값 객체 전달

C++ 함수 호출 객체 지향 설계: 매개변수 전달 및 반환 값 객체 전달

WBOY
풀어 주다: 2024-04-30 16:06:01
원래의
433명이 탐색했습니다.

C++ 함수 호출에서 매개변수는 값(매개변수 복사본 수신) 또는 참조(실제 객체에 대한 참조 수신)로 전달될 수 있습니다. 반환 값은 값이나 참조로 전달될 수도 있습니다. 값으로 전달하면 객체가 복사되고, 참조로 전달하면 객체에 대한 참조가 전달되므로 실제 객체에 영향을 줍니다.

C++ 函数调用面向对象设计:参数传递和返回值的对象传递

C++ 함수 호출 객체 지향 설계: 매개변수 전달 및 반환 값의 객체 전달

소개
객체 지향 프로그래밍에서 함수 호출 메커니즘은 중요한 역할을 합니다. 클래스 메서드나 함수를 호출할 때 매개변수와 반환값을 값이나 참조로 전달할 수 있습니다. 이 기사에서는 C++의 매개변수 전달 및 반환 값의 객체 전달 메커니즘을 자세히 살펴보고 실제 사례를 통해 보여줍니다.

매개변수 전달

C++에서는 매개변수를 값이나 참조로 함수에 전달할 수 있습니다. 값으로 전달한다는 것은 함수가 인수의 복사본을 받는다는 것을 의미하고, 참조로 전달한다는 것은 함수가 실제 객체에 대한 참조를 받는다는 것을 의미합니다.

  • 값 전송:

    void swap(int a, int b) {
    int temp = a;
    a = b;
    b = temp;
    }
    로그인 후 복사

위의 swap() 함수는 두 개의 정수를 교환합니다. ab는 값으로 전달되므로 함수 내부에서 수정해도 함수 외부의 실제 변수에는 영향을 미치지 않습니다. swap() 函数对两个整数进行了交换。由于 ab 以值传递的方式传递,因此函数内部对它们的修改不会影响函数外部的实际变量。

  • 引用传递:

    void swap(int& a, int& b) {
    int temp = a;
    a = b;
    b = temp;
    }
    로그인 후 복사

修改后的 swap() 函数使用引用传递,这意味着函数内部对 ab 的修改会传递回函数外部。

返回值的对象传递

函数不仅可以通过参数接收对象,也可以通过返回值返回对象。同样,对象可以通过值传递或引用传递的方式返回。

  • 值传递:

    Point getPoint() {
    return Point(x, y); // 复制构造函数被调用
    }
    로그인 후 복사

getPoint() 函数返回一个 Point 对象。由于函数返回值是按值传递的,因此函数内部构造的对象将被复制到函数外部。

  • 引用传递:

    Point& getPoint() {
    return Point(x, y); // 返回对临时变量的引用
    }
    로그인 후 복사

上面修改后的 getPoint()

참조로 전달:

class MyClass {
public:
  MyClass(int x, int y) : x(x), y(y) {}
  void print() {
    std::cout << "x: " << x << ", y: " << y << std::endl;
  }
private:
  int x, y;
};

int main() {
  MyClass obj1(10, 20); // 对象以值传递创建
  MyClass obj2; // 默认构造
  
  // 参数传递演示
  std::cout << "Before swap:" << std::endl;
  obj1.print();
  swap(obj1, obj2);
  std::cout << "After swap:" << std::endl;
  obj1.print();
  obj2.print();
  
  // 返回值传递演示
  MyClass obj3 = getPoint(); // 对象以值传递返回
  MyClass& obj4 = getPoint(); // 对象以引用传递返回
  
  // 对象修改
  obj3.x++;
  obj4.y--;
  
  // 输出结果
  std::cout << "obj3:" << std::endl;
  obj3.print();
  std::cout << "obj4:" << std::endl;
  obj4.print();
  
  return 0;
}
로그인 후 복사

수정된 swap() 함수는 참조로 전달을 사용합니다. 이는 a가 전달됨을 의미합니다. 함수 내부적으로 b에 대한 수정 사항은 함수 외부로 다시 전파됩니다.

반환값으로 전달되는 객체

🎜🎜함수는 매개변수를 통해 객체를 받을 수 있을 뿐만 아니라, 반환값을 통해 객체를 반환할 수도 있습니다. 마찬가지로 객체는 값이나 참조로 반환될 수 있습니다. 🎜🎜🎜🎜🎜값 전달: 🎜🎜
Before swap:
x: 10, y: 20
After swap:
x: 10, y: 20
x: 10, y: 20
obj3:
x: 11, y: 20
obj4:
x: 10, y: 19
로그인 후 복사
🎜🎜🎜getPoint() 이 함수는 Point 개체를 반환합니다. 함수 반환 값은 값으로 전달되므로 함수 내부에서 생성된 객체는 함수 외부에 복사됩니다. 🎜🎜🎜🎜🎜 참조에 의한 전달: 🎜🎜rrreee🎜🎜🎜위의 수정된 getPoint() 함수는 임시 변수에 대한 참조를 반환하여 참조에 의한 전달을 구현합니다. 따라서 실제 객체에 대한 참조는 함수 외부에서 얻을 수 있습니다. 그러나 함수가 지역 변수에 대한 참조를 반환하는 경우 함수가 반환될 때 지역 변수가 소멸되고 참조가 유효하지 않게 된다는 점에 유의해야 합니다. 🎜🎜🎜실용 사례🎜🎜🎜다음 코드를 고려하세요.🎜rrreee🎜🎜결과:🎜🎜rrreee🎜이 경우 매개변수 전달에서 값 전달은 함수 외부의 실제 객체에 영향을 미치지 않지만, 참조 전달은 실제 객체를 직접 수정합니다. 물체. 반환 값의 경우 값으로 전달하면 복사 개체가 생성되고, 참조로 전달하면 실제 개체에 대한 참조가 반환됩니다. 🎜

위 내용은 C++ 함수 호출 객체 지향 설계: 매개변수 전달 및 반환 값 객체 전달의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿