Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Навскидку ответите?


Автор: Medved 3.1.2005, 04:15
Сможете ответить, без выполнения этого кода, что будет в диалоговом окошке при вызове процедуры Нажми_на_кнопку? Код простейший. В коде две подсказки.

Код

 TO1 = class
 private
   { Private declarations }
 public
   { Public declarations }
   I: string;

   constructor Create(); overload;
   constructor Create(i:string); overload;
   procedure show();
 end;

var
 O1 : TO1;
...

{ O1 }

constructor TO1.Create();
begin
 ShowMessage('TO1 Created');
end;

constructor TO1.Create(i:string);
begin
 I := i;
 ShowMessage('TO1 Created');
end;

procedure O1.show;
begin
 ShowMessage(self.i);
end;

....

procedure Нажми_на_кнопку;
begin
 O1 := TO1.Create('Ye vjkjltw? ye ghjxtk ''nj cjj,otybt? f njkre&');
 O1.show;
end;




Придумал сам, поэтому просьба сильно не пинать.

Автор: p0s0l 3.1.2005, 04:39
Ответить охото, но оставлю для других smile

Только вопрос про имена - так задумано или ты по невнимательности запутался ?...

Автор: RA 3.1.2005, 05:21
Как только увидел
Цитата
'Ye vjkjltw? ye ghjxtk ''nj cjj,otybt? f njkre&
сразу понял в чём тут дело. smile

Напомнило принцип паролей у некоторых пользователей

Автор: daboogietrance 3.1.2005, 07:53
TO1 Created

Ну молодец, ну прочел
то сообщение?

Автор: <Spawn> 3.1.2005, 09:12
Тут кажись буковки не хватаетsmile - procedure TO1.show;

П.С.
А вот тут,
Код

constructor TO1.Create(i:string);
begin
I := i;
ShowMessage('TO1 Created');
end;

мне кажется, параметру i будет происходить присваивание самого же себя. Т.е. нужно написать для верной работы:

Код

Self.i := i;

Автор: Akella 3.1.2005, 09:52
мне кажется, что будет 2 сообщения
1. 'TO1 Created'
2. 'Ye vjkjltw? ye ghjxtk ''nj cjj,otybt? f njkre&'


Но к чему все это? smile

Автор: J. Bravo 3.1.2005, 11:57
Благодаря подсказкам <Spawn> имеем:
1. Такой код не будет компилироваться 8-)
2. Если всё же сделать так, чтобы компилировался (procedure TO1.show; вместо procedure O1.show;), то получим два сообщения:
Первое: 'TO1 Created'.
Второе: ''.

Автор: Medved 4.1.2005, 00:33
Цитата(p0s0l @ 3.1.2005, 07:39)
Только вопрос про имена - так задумано или ты по невнимательности запутался ?...


Специально, чтобы отвлечь. Человек начнет думать, что за имена такие дурацкие smile С ошибкой такая же бодяга. Для отвлечения внимания. И перегрузка конструкторов, тоже.

J. Bravo Правильно.
Добавлено @ 00:36
Просто это показательный пример, который учит использовать префиксы в именах параметров методов класса (да и в обычных процедурах и функциях тоже).

Автор: Snowy 4.1.2005, 09:25
Совпадение внутреннего имени переменной и передаваемого параметра в конструкторе.
Выдать может все, что угодно, я думаю... Хотя, может пустоту...
Вобщем i: string не была инициализирована, поэтому выдаст то, что назначит дельфя. Наверное пустоту...
Оптимально другую буковку в параметре просто задать.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)