Bug de redimensionnement des tableaux dans la version bêta 530 - page 8

 
angevoyageur:
Après fruits (pomme, poire), chat, chien et animal. Le manque d'imagination est terrible lorsque les gens parlent de oop. (cyclops993, pas sur vous, mais wikipedia.) Quel vrai programme a besoin d'une classe "animal" avec une méthode "talk". Je posterai un exemple de "commerce" dès que possible.

Script d'exemple un peu plus complet :

class Animal {
    public: virtual string talk() {return "";}
};
 
class Cat : public Animal {
    public: string talk() {return "Meow!";}
};
 

class Dog : public Animal {
    public: string talk() {return "Woof!";}
};

void OnStart()
{
   Animal * random;
   if (GetTickCount() % 2 == 0) {
      random = new Cat();
   } else {
      random = new Dog();
   }
   MessageBox(random.talk());  
   delete random;
}

Ce que je n'avais pas remarqué avant c'est qu'il ne semble pas être possible d'avoir des fonctions virtuelles sans corps s'il y a une référence à la classe de base. Dans l'exemple ci-dessus, vous ne pouvez pas faire ce qui suit :

class Animal {
   public: virtual string talk();
};

...alors qu'en C++ vous pouvez faire ce qui suit :

class Animal {
    public: virtual const char * talk() = 0; // Pure virtual function
};
 
class Cat : public Animal {
    public: const char *  talk() {return "Meow!";}
};
 

class Dog : public Animal {
    public: const char * talk() {return "Woof!";}
};

void main()
{
   Animal * random;
   if (GetTickCount() % 2 == 0) {
      random = new Cat();
   } else {
      random = new Dog();
   }
   printf(random->talk());   
}
 
SDC:

comment appelleriez-vous la classe chat et la classe chien, sont-elles des sous-classes d'animaux ? pourriez-vous créer une autre sous-classe de chien dans la classe chien et l'appeler classe pitbull ?

Oui, c'est exactement cela. Et lorsque vous utilisez ces classes, vous utilisez une variable qui affecte tous les objets d'une classe et de ses sous-classes. Comme le montre l'exemple de cyclops993 ( fonction principale), lorsque vous appelez talk() la bonne fonction est utilisée.
 

Ok, c'est plutôt chouette, je pense que je vais faire des efforts pour apprendre ça.

 
SDC:

Ok, c'est plutôt cool, je pense que je vais faire des efforts pour apprendre ça.

Par exemple :

class Pitbull : public Dog {
   public: 
      string talk() {return "Growl!";}
      void menace() {}
};

...Les pitbulls peuvent non seulement parler, comme les chats et les autres chiens, mais aussi menacer des choses.