Bug de redimensionamento de matriz em beta build 530 - página 8

 
angevoyageur:
Depois das frutas (maçã, pêra), gato, cachorro e animal. A falta de imaginação é terrível quando as pessoas estão falando de oop. (ciclops993, não sobre você, mas sobre wikipedia.) Qual programa real precisa de um "animal" de classe com um método "falar". Vou colocar um exemplo de "comércio" o mais rápido possível.

Um roteiro de exemplo um pouco mais 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;
}

O que eu não tinha notado antes é que não parece ser possível ter funções virtuais sem corpos se houver uma referência à classe base. No exemplo acima, você não pode fazer o seguinte:

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

...enquanto em C++ você pode fazer o seguinte:

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:

Então o que você chamaria de classe gato e classe cão, eles são subclasses de animal? você poderia criar outra subclasse de cão na classe cão e chamá-la de classe pitbull?

Sim, é exatamente isso. E ao usar estas classes, você usa uma variável e afeta quaisquer objetos de uma classe e suas subclasses. Como mostrado no exemplo do ciclops993 ( função principal), quando você chama talk() a boa função é usada.
 

ok, acho que vou fazer algum esforço para aprender isso.

 
SDC:

ok, acho que vou fazer algum esforço para aprender isso.

Por exemplo:

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

...Pitbulls não só podem falar, como gatos e outros cães, mas também podem ameaçar as coisas.