Хм ... Я думаю, что есть лот более простой способ справиться с этим:
class animal {
static int count;
animal() { ++count; }
~animal() { --count; }
};
class horse : public animal {
// horse stuff
};
class pig : public animal {
// pig stuff here
};
class dog : public animal {
// dog stuff here
};
int patient_count() { return animal::count; }
Кроме этого, ваш код, кажется, имеет довольно простую проблему: он сбивает с толку (например) животное с коллекцией животных.У вас есть несколько вещей, таких как:
dog current_dog; // Create a instance
// Send 3 values to the object
current_dog.add_dog("Misty, 15, Female");
current_dog.add_dog("Tristian, 12, Male");
current_dog.add_dog("Tempest, 11, Female");
Это не имеет смысла.Собака должна представлять именно это: одну собаку.У него одно имя, один возраст, один пол и так далее.То, что у вас есть, на самом деле - три собаки, а не одна.Чтобы представлять их, у вас должна быть коллекция собак - предпочтительно стандартная коллекция, такая как std::vector
, но если вам не разрешено использовать это (что может быть немного разумным, так как это звучит как домашнее задание), по крайней меремассив.
dog dogs[10]; // an array of 10 dogs (none yet initialized though)
dogs[0] = dog("Misty, 15, female");
dogs[1] = dog("Tristian, 12, male");
dogs[2] = dog("Tempest, 11, female");
Свиньи, коровы, лошади и т. д. почти одинаковы: один объект животного должен представлять одно действительное животное.Коллекция животных отличается от одного животного.Обратите внимание, однако, на комментарий выше: массив из 10 собак - это точно 10 собак (хотя ни у одной из них еще нет имени, возраста или пола, мы определили их так, что они все официально существуют).Это означает, что patient_count
сообщит о существовании 10 собак, когда вы определите массив, независимо от числа, которое содержит значимые данные.Это один из способов, которым std::vector
явно лучший выбор.Если вы сделаете что-то вроде:
std::vector<dog> dogs;
dogs.push_back("Misty, 15, female");
dogs.push_back("Tristian, 12, male");
dogs.push_back("Tempest, 11, female");
На этом этапе вы создали и сохранили 3 собаки, поэтому, если вы распечатаете patient_count
на этом этапе, он должен показать 3 (представляющих реальных собак, созданных /определено) не 10 (или что-либо другое) для представления числа потенциальных животных, при этом игнорируется число, содержащее значимые данные.