Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   virtual, перегрузка и наследование - есть ли в AS3? (http://www.flasher.ru/forum/showthread.php?t=130200)

progman 20.09.2009 17:49

virtual, перегрузка и наследование - есть ли в AS3?
 
помогите плизз разобраться а то в манах не понял нифига как делать:
вопрос раз про наследование классов и конструктор с параметрами:
Код AS3:

public class BaseObject extends BaseObject 
{
        public function BaseObject(  player: int )
        {               
                m_player  = player;
        }
}
 
public class BaseBuilding extends BaseObject
{
// как правильно записать конструктор для BaseObject?
        public function BaseBuilding(  player: int )
        {               
        }
}

вопрос два - про наследование и виртуальные функции:
Код AS3:

public class BaseObject
{
//есть ли аналог такой функции С++:
        virtual void destroy( ) = 0;
 
        public function create( ) : Boolean
        {               
                return true;
        }
}
 
public class BaseBuilding extends BaseObject
{
// как правильно вызывать метод класса и вызывать метод родительского класса?
        public function create( ) : Boolean
        {       
                //С++ синтаксис явно не катит (((
                return BaseObject::create();
        }
}

вопрос три про перегрузку:
Код AS3:

public class pgSprite extends BaseObject 
{
//как реализовать перегруженные функции?
        public function render( ) : void
        {       
        }
 
        public function render( x: int, y: int) : void
        {       
        }
}


Gaen 20.09.2009 17:59

1. Конструктор родителя вызывается через super()
Код AS3:

super(player);

2. Любой метод (кроме помеченных как final) можно переопределить в потомках через override.
Код AS3:

public override function create():Boolean

Родительский метод вызывается через super
Код AS3:

super.create();

Деструкторов в AS3 нет.

3. Перегрузки в AS3 нет. Можно пометить параметры как необязательные и нетипизированные, и в зависимости от реально переданного типа внутри метода определить нужное поведение.

enepx 20.09.2009 18:00

1.
Код AS3:

public function BaseObject (player:int) {
        super(player);
        ...
}

2. Вроде нету в АС3 виртуальных, насколько я помню. А зачем Вам дестройер? Есть GC;

3. Ооп-верной перегрузки (с изменением сигнатуры функции) тоже вроде нету, можно обойти ее передав Object и определять типы внутри функции и/или заюзать неопределенное количество входных параметров.

Если в чем-то не прав, сильно не бейте. :)

progman 20.09.2009 18:06

Цитата:

Сообщение от enepx (Сообщение 852214)
1.
А зачем Вам дестройер? Есть GC;

а я ему не верю, все массивы и объекты созданные через new хочу сам убивать.

Felicast 20.09.2009 19:47

Цитата:

а я ему не верю, все массивы и объекты созданные через new хочу сам убивать
если есть хоть одна ссылка на объект, он не убъется. вам просто нужно следить, чтобы было как можно меньше зависимостей
Цитата:

virtual void destroy( ) = 0;
любой метод, кроме помеченных как final, является виртуальным.
чистовиртуальные функции задать не получится. используйте интерфейсы - аналог абстрактных классов в c++

wvxvw 20.09.2009 19:55

В AS3 есть всего 2 объекта которые позволяют форсировать их уничтожение: BitmapData.dispose() и Loader.unloadAndStop() [доступно только в 10м плеере]. Все остальные объекты самостоятельно вы удалить не можете.

enepx 20.09.2009 21:04

Цитата:

Сообщение от wvxvw (Сообщение 852244)
Все остальные объекты самостоятельно вы удалить не можете.

Динамические можно удалить с помощью delete.

iNils 20.09.2009 22:23

Цитата:

Сообщение от enepx (Сообщение 852266)
Динамические можно удалить с помощью delete.

речь идет об удалении и отчистки не дожидаясь GC

wvxvw 20.09.2009 22:33

Цитата:

Сообщение от enepx (Сообщение 852266)
Динамические можно удалить с помощью delete.

delete - это как удаление файла в системе, удаляется только метка, а destruct() если бы такой был, это было бы как если вы поверх старого файла нули записали, т.е. полное физическое уничтожение. delete может удалить только ссылку на объект, но если ссылок несколько, то ничего с объектом не случится.

Felicast 21.09.2009 10:34

Цитата:

Сообщение от wvxvw (Сообщение 852279)
delete - это как удаление файла в системе, удаляется только метка, а destruct() если бы такой был, это было бы как если вы поверх старого файла нули записали, т.е. полное физическое уничтожение. delete может удалить только ссылку на объект, но если ссылок несколько, то ничего с объектом не случится.

delete - скорее как удаление жесткой ссылки на файл (в *nix). пока есть хоть одна ссылка, файл считается не удаленным. как только все ссылки удалены, занимаемая файлом область считается свободной


Часовой пояс GMT +4, время: 23:37.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.