Maison > développement back-end > C++ > Conception orientée objet d'appel de fonction C++ : transmission de paramètres et transmission d'objet de valeur de retour

Conception orientée objet d'appel de fonction C++ : transmission de paramètres et transmission d'objet de valeur de retour

WBOY
Libérer: 2024-04-30 16:06:01
original
447 Les gens l'ont consulté

Dans les appels de fonction C++, les paramètres peuvent être transmis par valeur (recevant une copie du paramètre) ou par référence (recevant une référence à l'objet réel). Les valeurs de retour peuvent également être transmises par valeur ou par référence. Le passage par valeur copie l'objet, tandis que le passage par référence transmet une référence à l'objet, affectant ainsi l'objet réel.

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

Conception orientée objet d'appel de fonction C++ : transmission de paramètres et transmission d'objets de valeurs de retour

Introduction
Dans la programmation orientée objet, le mécanisme d'appel de fonction joue un rôle crucial. Lors de l'appel d'une méthode ou d'une fonction de classe, les paramètres et les valeurs de retour peuvent être transmis par valeur ou par référence. Cet article explorera en profondeur le mécanisme de transmission d'objets de transmission de paramètres et de valeur de retour en C++, et le démontrera à travers des cas pratiques.

Passage de paramètres

En C++, les paramètres peuvent être transmis aux fonctions par valeur ou référence. Passer par valeur signifie que la fonction reçoit une copie de l'argument, tandis que passer par référence signifie que la fonction reçoit une référence à l'objet réel.

  • Transfert de valeur :

    void swap(int a, int b) {
    int temp = a;
    a = b;
    b = temp;
    }
    Copier après la connexion

La fonction swap() ci-dessus échange deux entiers. Puisque a et b sont passés par valeur, leurs modifications à l'intérieur de la fonction n'affecteront pas les variables réelles en dehors de la fonction. swap() 函数对两个整数进行了交换。由于 ab 以值传递的方式传递,因此函数内部对它们的修改不会影响函数外部的实际变量。

  • 引用传递:

    void swap(int& a, int& b) {
    int temp = a;
    a = b;
    b = temp;
    }
    Copier après la connexion

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

返回值的对象传递

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

  • 值传递:

    Point getPoint() {
    return Point(x, y); // 复制构造函数被调用
    }
    Copier après la connexion

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

  • 引用传递:

    Point& getPoint() {
    return Point(x, y); // 返回对临时变量的引用
    }
    Copier après la connexion

上面修改后的 getPoint()

Pass par référence :

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;
}
Copier après la connexion

La fonction swap() modifiée utilise le passage par référence, ce qui signifie que a et sont passés en interne dans la fonction Les modifications apportées à b sont propagées à l'extérieur de la fonction.

Objet passant par valeur de retour

🎜🎜La fonction peut non seulement recevoir des objets via des paramètres, mais également renvoyer des objets via des valeurs de retour. De même, les objets peuvent être renvoyés par valeur ou par référence. 🎜🎜🎜🎜🎜Value passant: 🎜🎜
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
Copier après la connexion
🎜🎜🎜getPoint() La fonction renvoie un objet Point. Étant donné que les valeurs de retour de la fonction sont transmises par valeur, les objets construits à l'intérieur de la fonction seront copiés en dehors de la fonction. 🎜🎜🎜🎜🎜 Passage par référence : 🎜🎜rrreee🎜🎜🎜La fonction getPoint() modifiée ci-dessus implémente le passage par référence en renvoyant une référence à une variable temporaire. Par conséquent, une référence à l’objet réel peut être obtenue en dehors de la fonction. Cependant, il convient de noter que si la fonction renvoie une référence à une variable locale, la variable locale sera détruite au retour de la fonction et la référence deviendra invalide. 🎜🎜🎜Cas pratique🎜🎜🎜Considérez le code suivant :🎜rrreee🎜🎜Résultat :🎜🎜rrreee🎜Dans ce cas, le passage de valeur dans le passage de paramètre n'affecte pas l'objet réel en dehors de la fonction, tandis que le passage de référence modifie directement l'objet réel objet. Pour les valeurs de retour, le passage par valeur crée un objet de copie, tandis que le passage par référence renvoie une référence à l'objet réel. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal