|
как будет выполнена строчка
if (get_corners() == 4)
return new Square;
если экземпляра класса еще нет - вы ведь его на следующей строке создаете?
А насчет RTTI - так его, насколько я понял, в Си++ официально нет - это лишь приятное расширение, которое в одном компилере может присутствовать, а в другом его нет. Более того, даже в тех компилерах, в которых эта штуковина присутствует, ест она о-о-чень много памяти, поскольку как правило содержит кучу лишней информации. Например, название класса в виде строки. (то есть это конечно приятно, но больно уж накладно). Поэтому эмбеддед-компилеры имеют опцию не включать RTTI. Да и зачем RTTI, если экземпляр класса можно создать, имея лишь указатель на VMT, которая всегда присутствует (для классов, обладающих виртуальными методами)?
А кстати, вот еще вопросик. Не знаете ли как проверить, является ли такой-то объект наследником такого-то объекта (этот "такой-то" объект мне недоступен, его описывал не я и править его не могу)? А то мне это сделать нужно, а как по-человечески это сделать, не обращаясь к VMT (расположение и структура которой строго говоря не документированы), я не знаю.