Heim  >  Artikel  >  Backend-Entwicklung  >  Objektorientiertes Design von C++-Funktionsaufrufen: Parameterübergabe und Rückgabewertobjektübergabe

Objektorientiertes Design von C++-Funktionsaufrufen: Parameterübergabe und Rückgabewertobjektübergabe

WBOY
WBOYOriginal
2024-04-30 16:06:01370Durchsuche

In C++-Funktionsaufrufen können Parameter als Wert (Empfang einer Kopie des Parameters) oder als Referenz (Empfang einer Referenz auf das tatsächliche Objekt) übergeben werden. Rückgabewerte können auch als Wert oder als Referenz übergeben werden. Die Übergabe als Wert kopiert das Objekt, während die Übergabe als Referenz eine Referenz auf das Objekt übergibt und sich somit auf das eigentliche Objekt auswirkt.

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

Objektorientierter C++-Funktionsaufrufentwurf: Parameterübergabe und Objektübergabe von Rückgabewerten

Einführung
Bei der objektorientierten Programmierung spielt der Funktionsaufrufmechanismus eine entscheidende Rolle. Beim Aufruf einer Klassenmethode oder -funktion können Parameter und Rückgabewerte als Wert oder als Referenz übergeben werden. In diesem Artikel wird der Objektübergabemechanismus der Parameterübergabe und des Rückgabewerts in C++ eingehend untersucht und anhand praktischer Fälle demonstriert.

Parameterübergabe

In C++ können Parameter per Wert oder Referenz an Funktionen übergeben werden. Die Übergabe als Wert bedeutet, dass die Funktion eine Kopie des Arguments erhält, während die Übergabe als Referenz bedeutet, dass die Funktion eine Referenz auf das tatsächliche Objekt erhält.

  • Wertübertragung:

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

Die obige Funktion swap() tauscht zwei ganze Zahlen aus. Da a und b als Wert übergeben werden, wirken sich Änderungen an ihnen innerhalb der Funktion nicht auf die tatsächlichen Variablen außerhalb der Funktion aus. 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()

Referenzübergabe:

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

Die modifizierte Funktion swap() verwendet die Referenzübergabe, was bedeutet, dass a und übergeben werden Intern in der Funktion werden Änderungen an b nach außerhalb der Funktion propagiert.

Objektübergabe durch Rückgabewert

🎜🎜Funktion kann nicht nur Objekte über Parameter empfangen, sondern auch Objekte über Rückgabewerte zurückgeben. Ebenso können Objekte als Wert oder als Referenz zurückgegeben werden. 🎜🎜🎜🎜🎜Wertübergabe: 🎜🎜
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() Die Funktion gibt ein Point-Objekt zurück. Da Funktionsrückgabewerte als Wert übergeben werden, werden innerhalb der Funktion erstellte Objekte außerhalb der Funktion kopiert. 🎜🎜🎜🎜🎜 Übergabe per Referenz: 🎜🎜rrreee🎜🎜🎜Die oben modifizierte Funktion getPoint() implementiert die Übergabe per Referenz, indem sie eine Referenz auf eine temporäre Variable zurückgibt. Daher kann außerhalb der Funktion ein Verweis auf das eigentliche Objekt erhalten werden. Es ist jedoch zu beachten, dass, wenn die Funktion einen Verweis auf eine lokale Variable zurückgibt, die lokale Variable bei der Rückkehr der Funktion zerstört wird und der Verweis ungültig wird. 🎜🎜🎜Praktischer Fall🎜🎜🎜Betrachten Sie den folgenden Code:🎜rrreee🎜🎜Ergebnis:🎜🎜rrreee🎜In diesem Fall wirkt sich die Wertübergabe bei der Parameterübergabe nicht auf das tatsächliche Objekt außerhalb der Funktion aus, während die Referenzübergabe das tatsächliche Objekt direkt ändert Objekt. Bei Rückgabewerten erstellt die Übergabe als Wert ein Kopierobjekt, während die Übergabe als Referenz eine Referenz auf das tatsächliche Objekt zurückgibt. 🎜

Das obige ist der detaillierte Inhalt vonObjektorientiertes Design von C++-Funktionsaufrufen: Parameterübergabe und Rückgabewertobjektübergabe. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn