ホームページ  >  記事  >  バックエンド開発  >  C++ 関数呼び出しのオブジェクト指向設計: パラメーターの受け渡しと戻り値のオブジェクトの受け渡し

C++ 関数呼び出しのオブジェクト指向設計: パラメーターの受け渡しと戻り値のオブジェクトの受け渡し

WBOY
WBOYオリジナル
2024-04-30 16:06:01420ブラウズ

C 関数呼び出しでは、パラメーターは値によって (パラメーターのコピーを受け取る)、または参照によって (実際のオブジェクトへの参照を受け取る) 渡すことができます。戻り値は、値または参照によって渡すこともできます。値渡しではオブジェクトがコピーされますが、参照渡しではオブジェクトへの参照が渡されるため、実際のオブジェクトに影響します。

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

#C 関数呼び出しのオブジェクト指向設計: パラメーターの受け渡しと戻り値のオブジェクトの受け渡し

#はじめにオブジェクト指向プログラミングでは、関数呼び出しメカニズムが重要な役割を果たします。クラスのメソッドまたは関数を呼び出すとき、パラメータと戻り値は値または参照で渡すことができます。この記事では、C におけるパラメータの受け渡しと戻り値のオブジェクト受け渡しメカニズムを深く掘り下げ、実際のケースを通じてそれを実証します。

パラメータの受け渡し

C では、パラメータを値または参照によって関数に渡すことができます。値渡しは関数が引数のコピーを受け取ることを意味し、参照渡しは関数が実際のオブジェクトへの参照を受け取ることを意味します。

  • 値の転送:

    void swap(int a, int b) {
    int temp = a;
    a = b;
    b = temp;
    }

上記の

swap() 関数は 2 つの整数をペアにします。交換が行われました。 ab は値によって渡されるため、関数内でこれらを変更しても、関数の外にある実際の変数には影響しません。

  • 参照渡し:

    void swap(int& a, int& b) {
    int temp = a;
    a = b;
    b = temp;
    }

変更された

swap() 関数は pass by を使用します。これは、関数内の a および b への変更が関数の外部に渡されることを意味します。

戻り値のオブジェクト受け渡し

関数はパラメータを通じてオブジェクトを受け取るだけでなく、戻り値を通じてオブジェクトを返すこともできます。同様に、オブジェクトは値または参照によって返すことができます。

  • 値の受け渡し:

    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;
}

結果:

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
この場合、パラメータ転送での値の転送は関数の外の実オブジェクトに影響を与えませんが、参照転送は実際のオブジェクトを直接変更します。戻り値の場合、値渡しではコピー オブジェクトが作成されますが、参照渡しでは実際のオブジェクトへの参照が返されます。

以上がC++ 関数呼び出しのオブジェクト指向設計: パラメーターの受け渡しと戻り値のオブジェクトの受け渡しの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。