![]() |
наследование классов: реализация функции clone() объектов
Всем доброго времени суток.
Есть такая иерархия классов: BaseObject - содержит базовые свойства, присущие всем объектам игрового мира WorldObject - наследник класса BaseObject, основная графическая единица игры У обоих этих объектов есть метод clone(), который создает и возвращает копию этого объекта. Вопрос в том, как правильно реализовать эту функцию в классе WorldObject, чтобы: свойства, присущие классу BaseObject копировались в его функции clone(), а свойства, присущие классу WorldObject, копировались в его функции clone()? Самое лучшее, что придумалось, выглядит так: Код AS3:
Код AS3:
|
Есть такой вариант:
Код AS3:
Код AS3:
|
Ну как, подходит?
|
да как то тоже не очень по ООП-шному ). Луче уж тогда просто описывать все поля в самом классе WorldObject (и его собственные и из базового класса), просто не вызывая super.clone() вообще
|
Код AS3:
Код AS3:
Это что бы работало, а вообще baseObjectPtr можно было бы создавать в самой функции clone, а не параметром передавать. |
Как раз тот случай когда пригодились бы виртуальные методы. Вообще, я думаю, что параметр функции клонирования ни к чему, проще жить будет если она сама все что ей нужно будет создавать.
|
incvizitor, неувязочка небольшая получилась: в BaseObject клонируется исключительно в переданный объект (и нового не создается), а в WorldObject переданная ссылка нигде и не используется. Логика то метода разная получается - нехорошо ))
|
i.o., прочитайте комментарий который я оставил после своего поста, я там уже ответил на Вашу претензию =)
Добавлено через 3 минуты А вообще, думаю писать надо вот так: Код AS3:
|
Только так не скомпилируется, да и проще мижно:
Код AS3:
|
Цитата:
PS: для веселухи метод с writeObject: Код AS3:
|
Цитата:
Добавлено через 2 минуты Цитата:
|
baseObjectPtr:curClass= new curClass();
Вот эта строчка - это что? Метка цикла? Объявление переменной (без var)? curClass нельзя использовать в качестве типа, тип должен быть известен на момент компиляции. А зачем 2 функции, и одну из двух оверрайдить, если можно только одну, и ее же оверрайдить? |
Да уж, варианты интересные, особенно порадовал с использованием ByteArray ))
Пожалуй, оставлю, как есть ) |
Как вариант можно сделать метод applyAllParametrs, чтобы метод clone выглядел вот так:
Код AS3:
|
Цитата:
Код AS3:
Если нужна компактность, то вот как такой вариант: Код AS3:
Код AS3:
Код AS3:
Ну вот вообще компакт ))) Код AS3:
Код AS3:
|
wvxvw, ну да, запятую пропустил =)
curClass, По любому известен, так как это наш данный класс, и если наш класс компилируется, то curClass будет известен. Ладно, мне с Вами спорить еще рано :) |
| Часовой пояс GMT +4, время: 13:00. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.