Delphi class abstract (версия Delphi XE7) #725605


#0 by Ненавижу 1С
Описываю класс как абстрактный type   MDObject=class abstract   end; однако его экземпляры все равно можно создавать var   x:MDObject; begin   x:=MDObject.Create;   x.Free; end вопрос, а в чем тогда смысл этой инструкции?
#1 by Serginio1
А варнинги при компиляции есть?
#2 by vde69
на сколько помню, это именно для того и сделано, что-бы не выдавало ошибку.... абстрактный класс служит некой "болванкой" для шилдов. В твоем примере MDObject = TObject
#3 by Кирпич
а почему мы решили что создавать экземпляры абстрактных классов запрещено?
#4 by Looser-1c
По определению абстрактного класса....
#5 by Кирпич
по идее, должно ругаться при обращении к абстрактному методу. добавь в класс метод. может заругается.
#6 by 18_plus
гуглозабаненные все "В одних языках создавать экземпляры абстрактных классов запрещено, в других это допускается (например, ObjectPascal(Delphi)), но обращение к абстрактному методу объекта этого класса в процессе выполнения программы приведёт к ошибке."
#7 by Кирпич
ну смотря кто их придумывал. в одних языках так, в других по другому.
#8 by vde69
пример использования описываем абстракный класс TCustomMuClass со свойством P1 потом на его основании описываем 2 разных класса TMuClass1 и TMuClass2 в них переопределяем P1 каждый на свой... потом гдето (например в TList) хотим использовать поле заранее не зная какой класс, тогда там описываем items как объект TCustomMuClass а фактически помещаем туда то что надо из своих двух классов. То есть используем типизированый указатель на родителя....
#9 by Кирпич
от у тебя в голове дым. я балдею. :)))
#10 by Ненавижу 1С
тут и интерфейс можно
#11 by Looser-1c
А в дельфи он есть?
#12 by Кирпич
есть, но по уродски
#13 by Кирпич
+ мож правда уже переделали. они же каждые полгода новые версии шлёпают
#14 by Ненавижу 1С
нашел Note: Delphi allows instantiating a class declared abstract, for backward compatibility, but this feature should not be used anymore ладно, хотя я не помню про такую директиву класса в ранних версиях, тогда такой вопрос: Как сделать так, чтобы нельзя было создать объект класса?
#15 by Кирпич
а зачем такой класс нужен?
#16 by Ненавижу 1С
чтобы клиенты библиотеки не могли создать объект базового класса, а только разрешенные дочерние
#17 by Кирпич
ну пускай создают. тебе жалко что ли.
#18 by Кирпич
создаст. посмотрит - не работает и больше не будет создавать.
#19 by Ненавижу 1С
не логично
#20 by Кирпич
вообще эта дурь годам к 30-35 должна пройти. так что лучше отложи пока решение этого важного вопроса.
#21 by Ненавижу 1С
шарп такое умеет, плюсы тоже, а тут на тебе - нет
#22 by Кирпич
ну так и пиши на C#, если это для тебя так важно. какой дебил будет создавать экземпляр абстрактного класса, если это не нужно в принципе? Можно запретить садиться на горячую сковородку. Кому надо тот сядет, а большинству это в голову даже не придёт.
Тэги: Математика и алгоритмы
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С