C + + les différences de surcharge, de dépassement et de redéfinition

Yueshan a compris. 2022-07-23 21:27:21 阅读数:604

lesdiffrencessurchargepassement
#include <iostream>
using namespace std;
class Parent01 {

public:
Parent01() {

cout << "Parent01" << endl;
}
public:
void aaa() {

cout << "aaa" << endl;
}
void func() {

cout << "Parent01::void func()" << endl;
}
virtual void func(int i) {

cout << "Parent01:: void func(int i)" << endl;
}
virtual void func(int i, int j) {

cout << "Parent01:: void func(int i, int j)" << endl;
}
};
class Child01 : public Parent01 {

public:
// Ici.2Paramètres,Et sous - classesfuncQuelle est la relation entre les fonctions
void func(int i, int j) {

cout << "Child01:: void func(int i, int j): " << i + j << endl;
}
// Ici.23Paramètres,Et sous - classesfuncQuelle est la relation entre les fonctions
void func(int i, int j, int k) {

cout << "Child01:: void func(int i, int j, int k): " << i + j + k<< endl;
}
};
void run(Parent01* p) {

p->func(1, 2);
}
/* * Surcharge de fonction: * Doit se dérouler dans la même classe * La Sous - classe ne peut pas surcharger la fonction de la classe mère , La fonction parent avec le même nom sera écrasée par le nom * La surcharge est un appel de fonction qui est déterminé par le type et le nombre d'arguments pendant la compilation * * Outrepasser la fonction: * Doit se produire entre la classe mère et la classe Enfant * Et les fonctions de la classe mère et de la classe enfant doivent avoir exactement le même prototype * Utiliservirtual Les Polymorphismes peuvent être générés après la Déclaration (Si non utilisévirtual, C'est une redéfinition ) * Le polymorphisme est un appel de fonction qui détermine le type d'objet spécifique pendant l'exécution */
// Ne peut pas surcharger une fonction d'une classe mère dans une sous - classe ,C'est ce que font les compilateurs.. Obéis. ..
/* * Deux cas de réécriture : * Si la fonction de sous - classe est dépassée , Son parent a ajouté virtualMots clés, Sera capable de produire des polymorphismes * Si la fonction de sous - classe est dépassée , Il n'y a pas de parent virtualMots clés, équivalent à redéfinir dans une sous - classe , Pas de polymorphisme */
void main() {

Parent01 p;
p.func();
p.func(1);
p.func(1, 2);
Child01 c;
c.aaa(); // Cette fonction hérite de la classe mère ,Peut être utilisé
// Raisons: Les enfants et les parents ont le même nom ( Nom de la variable ou de la fonction )Heure, Le nom de la Sous - classe écrase le nom de la classe mère , Si vous voulez utiliser les ressources de la classe parent ,À ajouter:: Le champ d'application spécifie 
// C2661 “Child01::func”: Aucune fonction surchargée n'accepte 0 Paramètres
//c.func(); // error Questions1 Cette fonction hérite de la classe mère Pourquoi ça ne peut pas être utilisé ? La raison en est que le nom a été écrasé 
c.Parent01::func();
c.func(1, 2);
run(&p);
run(&c);
system("pause");
}
Copyright:Cet article est[Yueshan a compris.]Établi,Veuillez apporter le lien original pour réimprimer,remercier。 https://fra.fheadline.com/2022/204/202207232126049101.html