
Сообщение от
Andru1312
Код C++
1
virtual int get()
А это просто виртуальная функция, если чисто виртуальную функцию нужно обязательно переопределить в производных классах, (если это го не сделать, то производный класс также станет виртуальным классом) то эту функцию можно и не переопределять и класс просто какой есть такой есть virtual позволяет использовать виртуальный механизм вызова функци, это вроде как диспетчеризация называется и еще это называют полиморфизм, это когда через указатель на базовый класс вызывается без проверки нужная виртуальная функция.
Добавлено через 8 минут
Код C++
A1 *a1 = new A1(); //создается указатель a1 на объект A1 (A1() - это вызов конструктора типа А1)
A1 *a2 = new A2();//а тут уже для указателу на базовый класс A1 присваивается адрес объекта производного класса А2, по правилам можно указателю базового класса присвоить указатель на производный класс.
A2 *test = 0; //создается указатель на тип (класс) А2, которому присваивается 0 (указывает ни на что)
test = dynamic_cast< A2 * >( a1 ); //а здесь происходит динамическое преобразование типа, так как указатель а1 указывает на тип А1, которые не есть А2, то test будет равен 0, тоесть преобразования не произойдет.
if ( test != 0 )
std::cout << "a1 is A2 object" << std::endl;
else
std::cout << "a1 is not A2 object" << std::endl;//эта строчка выведется потому что a1 не А2