Bug di ridimensionamento degli array nella build beta 530 - pagina 8

 
angevoyageur:
Dopo frutta (mela, pera), gatto, cane e animale. La mancanza di immaginazione è terribile quando si parla di oop. (ciclope993, non su di te, ma su wikipedia.) Quale programma reale ha bisogno di una classe "animale" con un metodo "parlare". Posterò un esempio di "commercio" il più presto possibile.

Script di esempio leggermente più 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;
}

Quello che non avevo notato prima è che non sembra essere possibile avere funzioni virtuali senza corpo se c'è un riferimento alla classe base. Nell'esempio precedente non si può fare quanto segue:

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

...mentre in C++ si può fare quanto segue:

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:

Quindi come chiamereste le classi gatto e cane, sono sottoclassi di animali? Potreste creare un'altra sottoclasse di cane nella classe cane e chiamarla classe pitbull?

Sì, è esattamente così. E quando si usano queste classi, si usa una variabile e si influenzano tutti gli oggetti di una classe e delle sue sottoclassi. Come mostrato nell'esempio di cyclops993 ( funzione principale), quando chiami talk() viene usata la funzione good.
 

Ok, questo è abbastanza pulito, penso che farò qualche sforzo per imparare questo

 
SDC:

Ok, questo è abbastanza chiaro, penso che farò qualche sforzo per imparare questo

Per esempio:

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

...I Pitbull non solo possono parlare, come i gatti e gli altri cani, ma possono anche minacciare le cose.