Ошибка изменения размера массива в бета-версии сборки 530 - страница 8

 
angevoyageur:
После фруктов (яблоко, груша), кошка, собака и животное. Отсутствие воображения просто ужасно, когда люди говорят об oop. (cyclops993, не про вас, а про википедию.) Какой реальной программе нужен класс "animal" с методом "talk". Я опубликую пример "торговли" как можно скорее.

Немного более полный пример скрипта:

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

Что я не заметил до этого, так это то, что, похоже, невозможно иметь виртуальные функции без тела, если есть ссылка на базовый класс. В приведенном выше примере вы не можете сделать следующее:

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

... тогда как в C++ вы можете сделать следующее:

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:

Так как бы вы назвали класс cat и класс dog, являются ли они подклассами класса animal? Можно ли создать еще один подкласс dog в классе dog и назвать его классом pitbull?

Да, именно так. И при использовании этих классов, вы используете переменную и затрагиваете любые объекты одного класса и его подклассов. Как показано в примере cyclops993 ( функция main), при вызове talk() используется функция good.
 

Хорошо, это довольно аккуратно, я думаю, я приложу некоторые усилия, чтобы научиться этому.

 
SDC:

Хорошо, это довольно аккуратно, я думаю, я приложу некоторые усилия, чтобы научиться этому.

Например:

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

...Питбули могут не только разговаривать, как кошки и другие собаки, но и угрожать.