Новости Фотки Надписи на партах Под гармошку Обои для рабочего стола Downloads Компьютерные магазины Фуфло ЕЯС НКС ООП СЦОД Гостевая Я ВКонтакте |
Объектно-ориентированное программированиеУрок №5. Немного о виртуальных функциях.Наверное все понимают, для чего нужны виртуальные функции. Если не все, то объясню. Например, пусть дан некоторый класс Sobaka, и куча наследников от него, в несколько поколений. Sobaka Пусть в каждом классе будет описана функция show(), которая будет изображать эту собаку на экране. Для каждого класса - функция будет своя. Так вот, если мы объявим массив указателей на класс Sobaka: Sobaka * sob[100]; А затем каждому указателю присвоим динамически созданный экземпляр случайного класса: for (int i=0; i<100; i++) То при следующей конструкции: for (int i=0; i<100; i++) будет 100 раз вызвана функция show(), которая описана в классе Sobaka. НО!!! Но это В ТОМ случае, если функция show() будет НЕвиртуальной. А если же функция show() будет являться виртуальной, то тогда для каждого экземпляра класса - по указателю sob[i] - будет вызвана именно та функция show(), которая описана в классе наследнике. И совершенно не важно, что указатель sob[i] имеет тип "указатель на Sobaka". sob[4]= new Bolonka(); Виртуальные функции можно применять в различных играх. Классический пример - "Танчики". Можно сделать кучу наследников от базового класса Tank. Затем все вражеские танки загнать в один массив (Tank *vt[100]). Cами танки могут обладать разными свойствами, например: по разному изображаться, по разному передвигаться, стрелять разными снарядами. Поэтому соответствующие функции show(), move(), fire() - можно сделать виртуальными и вызывать их из указателя на базовый класс: vt[i]->show(), vt[i]->move(), vt[i]->fire(). И, как вы уже надеюсь поняли, для различных типов танков будут вызваны различные функции. |
Дизайн: Красиков Виктор, kv630@mail.ru, ICQ - 319227
Местонахождение: Россия, респ. Бурятия, г. Улан-Удэ
Время на сервере: 15.07.25 13:04
Время в Улан-Удэ: 15.07.25 18:04
Время генерации страницы 0.006729 сек.