Думайте об этом с аспектно-ориентированной точки зрения; то, что Вы хотите сделать, действительно, знают все классы во времени выполнения, которые расширили класс Животных. (Я думаю, что это - немного более детальное описание Вашей проблемы, чем Ваш заголовок; иначе я не думаю, что у Вас есть вопрос во время выполнения.)
Поэтому то, что я думаю, что Вы хотите, должно создать конструктора Вашего базового класса (Животное), которое добавляет к Вашему статическому массиву (я предпочитаю ArrayLists, сам, но каждому их собственное) тип текущего Класса, который инстанцируют.
Так, примерно;
public abstract class Animal
{
private static ArrayList<Class> instantiatedDerivedTypes;
public Animal() {
Class derivedClass = this.getClass();
if (!instantiatedDerivedClass.contains(derivedClass)) {
instantiatedDerivedClass.Add(derivedClass);
}
}
, Конечно, Вам будет нужен статический конструктор на Животном для инициализации instantiatedDerivedClass... Я думаю, что это сделает то, что Вы, вероятно, хотите. Обратите внимание, что это зависимо от предшествующего пути развития выполнением; если у Вас будет класс Собаки, который происходит из Животного, которое никогда не вызывается, то у Вас не будет его в Вашем Списке учащихся Животных.
qDebug () и связанные с ним функции удобны для такого рода вещей - будут отправлены в отладчик (если вы используете Qt Creator, он легко их подберет!)
#include <QDebug>
qDebug() << "x is: " << x;
Вы всегда можете запустить свои программы из командной строки, чтобы увидеть вывод stdout (cmd.exe). Также, как сказал Пол Диксон, с помощью qDebug () вы сможете увидеть вывод в отладчике.
#include <QDebug>
...
{
...
int x = 5;
qDebug() << "x is: " << x;
}
Один дешевый способ - просто повторно открыть stdout / err (ну, по крайней мере, в win32, я предполагаю, что он будет работать и с Qt)
#include <stdio>
//add this at the beginning of your main
freopen("c:\\temp\\stdout.txt","w",stdout);
freopen("c:\\temp\\stderr.txt","w",stderr);
Если вам нужна более серьезная трассировка / ведение журнала рассмотрите, например, log4cxx