A2 & Oberon GOOGLE trans to English      Помощь      Поиск      Пользователи  Файловый архив


 Страниц (2): [1] 2 »   

> Описание: {OVERLOADING}
sage Администратор
Отправлено: 04 Декабря, 2008 - 08:41:33
Post Id


Full Member


Покинул форум
Сообщений всего: 218
Дата рег-ции: Июнь 2008  
Откуда: Киев, Украина
Репутация: 0




С удивлением обнаружил, что перегрузка процедур присутствует в языке А?!
А порой очень не хватало...
MODULE Overloading {OVERLOADING};

IMPORT
Commands;

PROCEDURE p1(i: INTEGER): INTEGER;
BEGIN
RETURN i + 10
END p1;

PROCEDURE p1(l: LONGINT): LONGINT;
BEGIN
RETURN l + 20
END p1;

PROCEDURE Test*(con: Commands.Context);
VAR
i: INTEGER;
l: LONGINT;
BEGIN
i := 1;
l := 2;
con.out.String('i = '); con.out.Int(p1(i), 0); con.out.Ln;
con.out.String('l = '); con.out.Int(p1(l), 0); con.out.Ln;
END Test;

END Overloading.Test ~
В лог выведется:
Цитата:
i = 11
l = 22
Следовательно, работает Хорошо
ЗЫ. Я попробовал только с процедурами...
Судя по коментарию к флагу:
Overloading* = 31;	(**Modules only: duplicate entries allowed (applies to all scopes in the module)*)
... любые дубли возможны в пределах модуля. Трудно даже вообразить, что ещё можно перегрузить Не понял
 
 Top
lit-uriy Супермодератор
Отправлено: 04 Декабря, 2008 - 10:32:05
Post Id


Advanced Member


Покинул форум
Сообщений всего: 298
Дата рег-ции: Нояб. 2008  
Откуда: Тюмень / Новосибирск
Репутация: 0




sage пишет:
С удивлением обнаружил, что перегрузка процедур присутствует в языке
дак это вроде еще в О-2 сделано, конструкторы перегруженные в О-2 применялись.
Я вот только про перегрузку операторов не знал.
 
 Top
sage Администратор
Отправлено: 04 Декабря, 2008 - 10:55:37
Post Id


Full Member


Покинул форум
Сообщений всего: 218
Дата рег-ции: Июнь 2008  
Откуда: Киев, Украина
Репутация: 0




lit-uriy пишет:
дак это вроде еще в О-2 сделано
Вообще-то по-умолчанию перегрузка процедур запрещена, нужен флажок {OVERLOADING}. Только вот, поиск по исходникам A2 показал, что это нигде не используется.
lit-uriy пишет:
конструкторы перегруженные в О-2 применялись.
Хорошая идея Подмигивание
 
 Top
lit-uriy Супермодератор
Отправлено: 10 Января, 2009 - 09:58:51
Post Id


Advanced Member


Покинул форум
Сообщений всего: 298
Дата рег-ции: Нояб. 2008  
Откуда: Тюмень / Новосибирск
Репутация: 0




sage пишет:
Хорошая идея
похоже перегруженый конструктор нельзя создать:
Огорчение
 
 Top
sage Администратор
Отправлено: 10 Января, 2009 - 13:27:58
Post Id


Full Member


Покинул форум
Сообщений всего: 218
Дата рег-ции: Июнь 2008  
Откуда: Киев, Украина
Репутация: 0




lit-uriy пишет:
похоже перегруженый конструктор нельзя создать:
Огорчение
Да, конструктор может быть только один... Флаг {OVERLOADING} тут не работает.
Но нам ничего не мешает определить новый конструктор у наследника под другим именем и с другими параметрами (имя конструктора похоже вообще не играет роли, главное значёк &, и чтобы оно было другим если будет другой набор параметров), а потом самим решить вызывать конструктор предка или нет Подмигивание
MODULE Untitled;

IMPORT
Commands;

TYPE

obj1 = OBJECT
VAR
n: INTEGER;

PROCEDURE &New1;
BEGIN
n := 1000
END New1;

END obj1;

obj2 = OBJECT (obj1)

PROCEDURE &New2(iValue: INTEGER);
BEGIN
New1;
n := iValue
END New2;

END obj2;

PROCEDURE Test*(con: Commands.Context);
VAR
o1: obj1;
o2: obj2;
BEGIN
NEW(o1);
NEW(o2, 100);
con.out.Int(o1.n, 0); con.out.Ln;
con.out.Int(o2.n, 0); con.out.Ln
END Test;

END Untitled.Test ~

SystemTools.Free Untitled ~


ЗЫ. Хотя то что не сработал флаг {OVERLOADING} может и не правильно в данном случае... баг? Ниндзя
 
 Top
lit-uriy Супермодератор
Отправлено: 10 Января, 2009 - 13:59:08
Post Id


Advanced Member


Покинул форум
Сообщений всего: 298
Дата рег-ции: Нояб. 2008  
Откуда: Тюмень / Новосибирск
Репутация: 0




sage пишет:
у наследника
sage пишет:
вызывать конструктор предка или нет
да мне конструктор предка ни к чему.
 
 Top
sage Администратор
Отправлено: 10 Января, 2009 - 14:41:35
Post Id


Full Member


Покинул форум
Сообщений всего: 218
Дата рег-ции: Июнь 2008  
Откуда: Киев, Украина
Репутация: 0




Похоже трапается даже при попытке перегрузить обычный метод (не конструктор). Так что тут высока вероятность того, что это всё-же баг... Эх, было-бы это немножко больше документированным...

ЗЫ. Можно попытаться запостить на OCP как баг, может исправят.
 
 Top
lit-uriy Супермодератор
Отправлено: 10 Января, 2009 - 14:45:55
Post Id


Advanced Member


Покинул форум
Сообщений всего: 298
Дата рег-ции: Нояб. 2008  
Откуда: Тюмень / Новосибирск
Репутация: 0




sageможет ты так и сделаешь, а то я с аглицким только в одну сторону дружу.
 
 Top
BohdanT Администратор
Отправлено: 10 Января, 2009 - 14:56:02
Post Id



Super Member


Покинул форум
Сообщений всего: 606
Дата рег-ции: Июль 2008  
Откуда: Киев, Украина
Репутация: 2




sage пишет:
Похоже трапается даже при попытке перегрузить обычный метод (не конструктор).

А можно пример с трапом?
 
 Top
sage Администратор
Отправлено: 10 Января, 2009 - 15:06:08
Post Id


Full Member


Покинул форум
Сообщений всего: 218
Дата рег-ции: Июнь 2008  
Откуда: Киев, Украина
Репутация: 0




Трапается даже если добавить {OVERLOADING} к предыдущему примеру с друмя объектами.
Т.е. при заданном флаге и без каких либо перегрузок:
MODULE Untitled {OVERLOADING};

Скачать файл: trap.txt
Скачан раз: 430
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0, скрытых: 0)
« ActiveOberon »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Locations of visitors to this page
[Valid RSS]

RSS

Valid CSS!


Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.0112]     [ Gzipped ]