Fehler bei der Größenänderung von Arrays in Beta-Build 530 - Seite 8

 
angevoyageur:
Nach Obst (Apfel, Birne), Katze, Hund und Tier. Der Mangel an Vorstellungskraft ist schrecklich, wenn die Leute über oop sprechen. (cyclops993, nicht über dich, sondern wikipedia.) Welches echte Programm braucht eine Klasse "animal" mit einer Methode "talk". Ich werde so bald wie möglich ein "Handels"-Beispiel posten.

Ein etwas vollständigeres Beispielskript:

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

Was mir vorher nicht aufgefallen war, ist, dass es nicht möglich zu sein scheint, virtuelle Funktionen ohne Körper zu haben, wenn es eine Referenz auf die Basisklasse gibt. Im obigen Beispiel kann man Folgendes nicht tun:

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

...während man in C++ folgendes tun kann:

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:

so was würden Sie Klasse Katze und Klasse Hund nennen, sind sie Unterklassen von Tier? könnten Sie eine andere Unterklasse von Hund in der Hundeklasse erstellen und es Klasse Pitbull nennen?

Ja, genau so ist es. Und wenn man diese Klassen verwendet, verwendet man eine Variable und wirkt sich auf alle Objekte einer Klasse und ihrer Unterklassen aus. Wie im Beispiel von cyclops993 ( Hauptfunktion) gezeigt, wird beim Aufruf von talk() die Funktion good verwendet.
 

Ok, das ist ganz nett, ich glaube, ich werde mir Mühe geben, das zu lernen.

 
SDC:

Ok, das ist ganz nett. Ich denke, ich werde mich bemühen, das zu lernen.

Zum Beispiel:

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

...Pitbulls können nicht nur sprechen, wie Katzen und andere Hunde, sondern sie können auch Dinge bedrohen.

Grund der Beschwerde: