Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > Общие вопросы Web
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.05.2013, 19:10   #1
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию Наследование в ActionScript - AS3 Flash

Есть класс A и его потомок B.

Код:
var v:Vector.<A> = new Vector.<A>();
	var b:B = new B();			
	v.push(b);
На каком-то этапе мне необходимо, чтоб объект, лежащий в v[0] был обрезан до свойств родительского класса. Т.е. мне нужно, чтоб в v[0] лежал объект класса А, но чтоб значения общих свойств у него были объекта b.

Допустим, у класса А есть высота и ширина. А у B еще и глубина. Вот мне нужен объект типа А с высотой и шириной, как у объекта В.

Создавать новый объект класса А, потом поочередно в него переписывать свойства объекта В не предлагать.
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 07.05.2013, 20:52   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
А у B еще и глубина.
А зачем, стесняюсь спросить, тогда нужен А? Используй В, раз он шире в плечах.
Или... не знаю как к AS а в Делфи можно просто привести к типу базового класса, и использовать его.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.05.2013, 21:17   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Еще такой вопрос возник (не знаю ActionScript): у Вас вектор хранит элементы класса А, судя по коду, а запихиваете Вы в него элементы класса Б, разве они сразу не обрезаются до базового (засунутые элементы)?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 07.05.2013, 21:27   #4
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

в AS не обрезаются. Если брать аналогию с Си++, то вектор хранит указатели на объекты класса В.
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 07.05.2013, 21:36   #5
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
разве они сразу не обрезаются до базового (засунутые элементы)
с чего им обрезатся?
физически они все теже, даже не знаю есть ли такая экзотика где то
eval вне форума Ответить с цитированием
Старый 07.05.2013, 23:24   #6
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

Цитата:
с чего им обрезатся?
в С++ обрезаются, если это не указатели.
Эх.. как мне иногда не хватает его возможностей
В общем, ничего подходящего так и не нашла, буду действовать окольными путями. Но если вдруг все-таки кто-то знает, напишите. Любопытно.
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 08.05.2013, 00:15   #7
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
в С++ обрезаются, если это не указатели.
пример можно?
eval вне форума Ответить с цитированием
Старый 08.05.2013, 00:55   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
пример можно?
Код:
#include <iostream>
#include <vector>
#include <typeinfo>

using namespace std;

class A
{
public:
    int x;
    A(int _x) : x(_x) {}
};

class B: public A
{
public:
    int y;
    B(int _x, int _y) : A(_x), y(_y) {}
};

int
main()
{
    vector<A> v;
    B b(1, 2);
    cout << typeid(b).name() << endl;
    v.push_back(b);
    cout << typeid(v[0]).name() << endl;
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 08.05.2013, 09:58   #9
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
B b(1, 2);
ну как бы это разные вещи, в топике ссылка, а у вас "продвинутая структура".
eval вне форума Ответить с цитированием
Старый 29.05.2013, 16:03   #10
crazy horse
ios developer
Старожил
 
Аватар для crazy horse
 
Регистрация: 16.11.2007
Сообщений: 2,885
По умолчанию

Я никак не могу понять сути вопроса. Если необходимо отсечение просто доступа к излишним данным, или же, абстракция от реализации класса, можно заюзать интерфейс. Если просто необходимо получить доступ к объекту B там, где подразумевается A, то можно просто скастить
Код:
var a:A = b as A
. Но, как правило, интерфейс решает все проблемы.
Код:
public interface IWH
{
function get w():int;
function get h():int;
}
...
public class A implements IWH
...
public class B implements IWH
...
var a:IWH = v[i];
Этим проблема решена, или она глубже? Поясните about it, мне интересно.
Цитата:
А зачем, стесняюсь спросить, тогда нужен А? Используй В, раз он шире в плечах.
Или... не знаю как к AS а в Делфи можно просто привести к типу базового класса, и использовать его.
Вот я тоже от недоумения всю голову проковырял. Имхо, такие вещи надо решать на уровне архитектуры, а не костылей.
Цитата:
Эх.. как мне иногда не хватает его возможностей
Основную грусть вызывает GC, и неочевидное, невменяемое поведение некоторых структур языка по скоростным критериям. Остальное простить можно, если нормально проектировать приложение, изначально учитывая все сильные и слабые стороны языка. Вот если этого не делать, тогда начинаются сложности. И это уже мало зависит от того, с cpp человек ушел на as3 или наоборот. Это общая и фундаментальная проблема.
Цитата:
Создавать новый объект класса А, потом поочередно в него переписывать свойства объекта В не предлагать.
А в чем сложность? Выглядит не красиво, но работает довольно быстро, и, в конечном итоге, все это нивелируется адовым временем вызова геттеров/сеттеров. Если уж совсем никуда без динамических решений, то есть if(a.hasOwnProperties(w)) и for each. В парсерах без этого подхода вообще никуда, тем более, контролировать и хэндлить ошибки таким образом куда проще.
PS. Я сам сильно против использования динамических переборов, без крайней надобности. Расплетать потом эти спагетти крайне муторно и противно. Лучше написать в 10 раз больше кода, но иметь четкую и удобную для отладки структуру.
ЗыЗы. Да, еще as3 печалит отсутствием множественного наследия.
ЗыЗыЗЫ. А вообще, почитайте-ка вы главу о полиморфизме на сайте эдабов. Если не вдаваться в хаки вроде перегрузки методов через пространство имен, то вы получите там исчерпывающие ответы.
Делайте что хотите, но чтобы через полчаса в лесу было светло, сухо и медведь!

Последний раз редактировалось crazy horse; 29.05.2013 в 16:40.
crazy horse вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
учу Flash ActionScript 3.0 по книге Колина Мука код с использованием наследование. Вот суперкласс: vladimirk Общие вопросы Web 2 20.04.2015 10:21
AS3, функции, зависящие от календаря - ActionScript, Flash Санеккк Общие вопросы Web 1 30.03.2015 10:06
Нужно кусок кода перевести из AS3 в PHP, JSON.serialize - ActionScript, Flash Isaev Общие вопросы Web 7 10.07.2014 11:28
Мухобойка. AS3 Flash Samkoff Общие вопросы Web 1 19.06.2014 23:43
PHP & Flash (AS3) Abuhamed PHP 1 19.06.2011 08:38