Comment appeler la fonction surchargée de la classe parent en C++ ?


zZzZ

Le rendu attendu :

Child = 2
Parent = 1

Mon code :

class Parent{
    int a;
    public:
        void display(){
            a = 1;
            cout << "Parent = " << a << endl;
        }
};

class Child:public Parent{
    int b;
    public:
        void display(){
            b = 2;
            cout << "Child = " << b << endl;
        }
};

int main()
{
    Parent *p = new Child();
    Child c;

    //write your code here
    /* My solution :
      c.display();
      Parent* a = &c;
      a->display();
    */


}

J'ai utilisé la liaison statique pour appeler avec succès la fonction membre display() de la classe parent

Cependant, je me demande s'il y a une meilleure solution pour cette question.

Quel est le but d'avoir cette ligne Parent *p = new Child();? Est-ce un pointeur pointant vers un constructeur ?

Quelle est la différence entre cette ligne et Parent *p = new Child;?

eerorika

Comment appeler la fonction surchargée de la classe parent en C++ ?

Vous n'avez en fait remplacé aucune fonction dans votre exemple. Seules les fonctions membres virtuelles peuvent être remplacées et ne displaysont pas virtuelles.

J'ai utilisé la liaison statique pour appeler avec succès la fonction membre display() de la classe parent

Votre solution fonctionne car aucune fonction de remplacement ou virtuelle n'est impliquée. Une autre façon d'appeler la fonction membre masquée consiste à utiliser l'opérateur de résolution de portée :

c.Parent::display();

Cela utiliserait une liaison statique même si la fonction était virtuelle.


Quel est le but d'avoir cette ligne Parent *p = new Child();?

Il ne semble pas avoir de but dans votre programme. En général, newest utilisé pour allouer des objets dynamiquement à partir du magasin gratuit.

Notez que la mémoire sera divulguée à moins que vous ne la désallouez explicitement avec delete. Pas non plus qui delete paurait un comportement indéfini, car il pointe vers une base dont le destructeur n'est pas virtuel.

Est-ce un pointeur pointant vers un constructeur ?

No. ppointe vers l'objet dynamique qui a été créé dans le magasin gratuit.

Quelle est la différence entre cette ligne et Parent *p = new Child;?

Sans parenthèses, vous utilisez la syntaxe d'initialisation par défaut. Avec des parenthèses vides, vous utilisez l'initialisation de la valeur.

Dans le cas de classes trivialement constructibles (telles que Parent), l'initialisation par défaut initialisera par défaut les membres. Dans le cas de membres entiers, cela laisse les membres non initialisés. L'initialisation de la valeur initialisera plutôt la valeur des membres, ce qui pour les entiers signifie l'initialisation à zéro.

Dans le cas de classes non trivialement constructibles (telles que Child), l'initialisation par défaut et la valeur invoquent le constructeur par défaut.

Articles connexes


Appeler la fonction de classe parent

qewg C'est la première fois que j'essaye d'utiliser super(), j'ai essayé de nombreux petits changements à ce code, mais avec tout ce que j'ai eu une erreur en ligne où se super()trouve. J'ai vu des questions similaires sur SO, mais elles ne fonctionnent pas da

Comment appeler la fonction de la classe UIView personnalisée?

s'il peut sauter J'ai UIView dans mon premier contrôleur de vue. J'ai défini cette classe UIView sur la vue de progression personnalisée à l'aide du code suivant. class ProgressView: UIView { let trackLayer = CAShapeLayer() let shapeLayer = CAShapeLaye

Comment appeler des fonctions de la classe parent en C++ ?

Akib Azmain TL;DR J'ai une classe dans laquelle certains noms de fonction sont en conflit avec la fonction de la classe parente. Comment appeler des fonctions de la classe parent en C++ ? Mon problème J'essaie de créer une classe avec une fonctionnalité de flu