Maison > Article > développement back-end > La relation entre les méthodes de transmission des paramètres de fonction C++ et l'héritage de classe
Question : Quelle est la relation entre les méthodes de transmission des paramètres de fonction C++ et l'héritage de classe ? Réponse : Lorsqu'une sous-classe hérite d'une fonction de classe parent, la méthode de transmission des paramètres peut être identique ou différente. Si la sous-classe ne remplace pas la fonction de la classe parent, elle hérite de la méthode de transmission des paramètres de la classe parent. Si une sous-classe remplace une fonction de classe parent, elle peut choisir d'utiliser une méthode de transmission de paramètres différente. Lorsqu'une sous-classe doit modifier les paramètres d'une fonction de classe parent, elle doit déclarer la fonction de classe parent comme passe par référence.
La relation entre les méthodes de transmission de paramètres de fonction et l'héritage de classe en C++
Introduction
Il existe deux façons de transmettre des paramètres de fonction en C++ : le passage par valeur et le passage par référence. Lorsqu'une fonction de classe parent est remplacée par une sous-classe, la méthode de transmission des paramètres peut être affectée. Cet article explorera la relation entre les méthodes de transmission de paramètres de fonction et l'héritage de classe.
Pass by value
Pass by value fait une copie des paramètres lorsque la fonction est appelée, de sorte que les modifications apportées aux paramètres dans la fonction n'affecteront pas les paramètres réels de la fonction appelante.
void swap(int a, int b) { int temp = a; a = b; b = temp; } int main() { int x = 1, y = 2; swap(x, y); // x 和 y 的值不会改变 return 0; }
Pass by reference
Pass by référence utilise directement l'adresse de stockage des paramètres lorsque la fonction est appelée, permettant à la fonction de modifier directement les paramètres réels dans la fonction appelante.
void swap(int& a, int& b) { int temp = a; a = b; b = temp; } int main() { int x = 1, y = 2; swap(x, y); // x 和 y 的值被交换 return 0; }
Héritage de classe et passage de paramètres
Lorsqu'une sous-classe hérite d'une fonction de classe parent, la méthode de passage de paramètres de la fonction de sous-classe peut être identique ou différente de la fonction de classe parent.
Exemple de méthode de passage de paramètres inchangés
Si la fonction de sous-classe ne remplace pas la fonction de classe parent, la fonction de sous-classe héritera de la méthode de passage de paramètres de la fonction de classe parent.
class Base { public: void func(int a); }; class Derived: public Base { public: using Base::func; // 不覆盖 func,继承按值传递 };
Exemple de modification de la méthode de passage de paramètres
Si une fonction de sous-classe remplace une fonction de classe parent, la fonction de sous-classe peut choisir d'utiliser une méthode de passage de paramètres différente.
class Base { public: void func(int a) {} }; class Derived: public Base { public: void func(int& a) {} // 覆盖 func,使用按引用传递 };
Cas pratique
Considérons une classe de base Shape
avec une fonction print()
et une classe qui hérite de Shape
et a Une sous-classe Circle
de la fonction draw(). Si Shape::print()
passe une référence Shape
par valeur, alors Circle::draw()
ne pourra pas modifier le parent le >print()
de la classe. print()
函数的 Shape
基类和一个继承 Shape
并具有 draw()
函数的 Circle
子类。如果 Shape::print()
按值传递一个 Shape
引用,则 Circle::draw()
将无法修改父类的 print()
。
class Shape { public: virtual void print(const Shape& shape) {} }; class Circle: public Shape { public: void draw() { // 无法修改父类的 print() print(static_cast<Circle&>(*this)); } };
为了允许子类修改父类的 print()
,需要将 print()
class Shape { public: virtual void print(Shape& shape) {} }; class Circle: public Shape { public: void draw() { // 可以修改父类的 print() print(*this); } };Afin de permettre aux sous-classes de modifier le
print()
de la classe parent, print()
doit être déclaré comme passe par référence. 🎜rrreeeCe 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!