Maison > développement back-end > C++ > le corps du texte

Gestion des références et des pointeurs dans la surcharge et la réécriture de fonctions C++

王林
Libérer: 2024-04-20 11:51:01
original
410 Les gens l'ont consulté

Lors de la surcharge d'une fonction, transmettez une référence ou un pointeur, et toutes les fonctions doivent utiliser le même type de données. Lorsqu'une fonction est réécrite, pour les fonctions membres de référence, la fonction de sous-classe doit faire référence au même type de variable ; pour pointer vers les fonctions membres, la fonction de sous-classe doit pointer vers le même type de variable.

C++ 函数重载和重写中引用和指针的处理

Gestion des références et des pointeurs dans la surcharge et le remplacement de fonctions C++

Surcharge de fonctions

La surcharge de fonctions permet la création de plusieurs fonctions avec le même nom mais des listes de paramètres différentes dans la même portée. Pour les références et les pointeurs, il faut faire attention aux points suivants :

  • Lors du passage d'une référence, toutes les fonctions doivent faire référence au même type de données :

    void print(const int& num);
    void print(const double& d);
    Copier après la connexion
  • Lors du passage d'un pointeur, toutes les fonctions doit pointer vers le même type de données :

    void print(int* num);
    void print(double* d);
    Copier après la connexion

Réécriture de fonction

La réécriture de fonction consiste à implémenter une fonction dans la classe parent avec le même nom et la même liste de paramètres dans la classe enfant. Pour les références et les pointeurs, nous devons faire attention :

  • Pour les fonctions membres de référence, la fonction de sous-classe doit faire référence au même type de variable :

    class Parent {
    public:
      void setAge(const int& age);
    };
    
    class Child : public Parent {
    public:
      void setAge(const int& age) override;  // 同一类型引用
    };
    Copier après la connexion
  • Pour pointer vers les fonctions membres, la fonction de sous-classe doit pointez vers le même type de variable :

    class Parent {
    public:
      int* getPtr();
    };
    
    class Child : public Parent {
    public:
      int* getPtr() override;   // 同一类型指针
    };
    Copier après la connexion

Cas pratique

Supposons que nous ayons une classe Person, qui représente l'âge et le nom d'une personne. Il y a deux fonctions membres dans cette classe : setAge(const int& age) et setName(const string& name). Person 类,它表示一个人的年龄和名字。该类中有两个成员函数:setAge(const int& age)setName(const string& name)

我们创建一个子类 Employee,继承自 Person 类,并重写 setAge 函数,在将年龄设置为 age 之前将其加 5。

class Person {
public:
    void setAge(const int& age);
    void setName(const string& name);
};

class Employee : public Person {
public:
    void setAge(const int& age) override;  // 重写setAge函数
};

// Employee 类中的 setAge 函数
void Employee::setAge(const int& age) {
    Person::setAge(age + 5);  // 调用父类setAge函数
}
Copier après la connexion

现在,我们可以创建一个 Employee 对象并使用重写的 setAge

Nous créons une sous-classe Employee, héritons de la classe Person et remplaçons la fonction setAge pour définir l'âge sur age </ code> avant d’y ajouter 5. 🎜<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:cpp;toolbar:false;'>Employee emp; emp.setAge(20); // 实际设置为 25</pre><div class="contentsignin">Copier après la connexion</div></div>🎜Maintenant, nous pouvons créer un objet <code>Employee et utiliser la fonction setAge remplacée : 🎜rrreee

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!

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