Error de redimensionamiento de matrices en la versión beta 530 - página 8

 
angevoyageur:
Después de frutas (manzana, pera), gato, perro y animal. La falta de imaginación es terrible cuando se habla de oop. (cyclops993, no se trata de ti, sino de la wikipedia.) ¿Qué programa real necesita una clase "animal" con un método "hablar". Voy a publicar un ejemplo de "comercio" tan pronto como sea posible.

Script de ejemplo un poco más completo:

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;
}

Lo que no había notado antes es que no parece ser posible tener funciones virtuales sin cuerpo si hay una referencia a la clase base. En el ejemplo anterior, no se puede hacer lo siguiente:

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

...mientras que en C++ se puede hacer lo siguiente:

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:

Entonces, ¿cómo llamarías a la clase gato y a la clase perro, son subclases de animal? ¿Podrías crear otra subclase de perro en la clase perro y llamarla clase pitbull?

Sí, es exactamente eso. Y cuando se utilizan estas clases, se utiliza una variable y afecta a cualquier objeto de una clase y sus subclases. Como se muestra en el ejemplo de cyclops993 ( función principal), cuando se llama talk() se utiliza la función buena.
 

Ok, eso es muy bueno, creo que voy a hacer un esfuerzo para aprender esto

 
SDC:

Ok, eso es bastante bueno, creo que voy a hacer un esfuerzo para aprender esto

Por ejemplo:

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

...Los Pitbulls no sólo pueden hablar, como los gatos y otros perros, sino que también pueden amenazar cosas.