![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
работа с классами
неугомонный © (2007-10-25 03:00:00)народ скажите в что делаю не так!!
создаю класс
type
TMyClass = class(TCustomControl)
private
FX:String;
public
procedure SetX(X:String);
procedure SetX(X:Integer);override; ошибка в этой строке - Method 'SetX' not found in base class
что не так делаю??
end;
procedure TMyClass.SetX(X:String);
begin
fx := x;
end;
procedure TMyClass.SetX(X:Integer); override;
begin
FX := IntToStr(X);
end;
Amoeba (2007-10-25 11:08:00) [1]
> неугомонный (25.10.07 03:35) [4]
>
> нет не чувствую, читал
> Архангельского, непонятно :(
"Гляжу в книгу - вижу фигу"?
Германн (2007-10-25 04:00:00) [2]
> Неужели у Архангельского ничего нет об основах языка?
Риторический вопрос однако.
Джо (2007-10-25 03:54:00) [3]Краткий пример:
virtual/override.
TBaseClass = class
procedure A; virtual;
end;
TDescedantClass = class (TBaseClass)
procedure A; override;
end;
overload.
procedure A (X: Integer); overload;
procedure A (S: string); overload;
Они служат совершенно разной цели, как видим.
Все-же почитайте нормальный справочник по языку.
Джо (2007-10-25 03:51:00) [4]Так и будем пробовать все ключевые слова по порядку, пока не заработает? :)
Неужели у Архангельского ничего нет об основах языка?
override— перекрывает одноименный виртуальный (virtual) или динамический (dynamic) метод предка.
overload— позволяет объявить несколько методов (или процедур/функций) с одинаковым названием, но разными списками формальных параметров.
неугомонный (2007-10-25 03:35:00) [5]нет не чувствую, читал
Архангельского, непонятно :(
вот пытаюсь перекрыть,не получается
type
TMyClass = class
private
FX:String;
public
procedure SetX(X:String);overload; virtual;
procedure SetX(X:Integer); overload;
end;
type
TMyClass1 = class(TMyClass)
private
FX:String;
public
procedure SetX(X:String);override;
procedure SetX(X:Integer); overload;
end;
procedure TMyClass.SetX(X:String);
begin
fx := x;
end;
procedure TMyClass.SetX(X:Integer);
begin
FX := IntToStr(X);
end;
procedure TMyClass1.SetX(X:String);
begin
inherited;
fx := x+'gg';
end;
procedure TMyClass1.SetX(X:Integer);
begin
FX := IntToStr(X);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
test:TMyClass1;
begin
test := TMyClass1.Create();
test.SetX('10');
form1.Caption := test.FX;
test.Free;
end;
Германн (2007-10-25 03:25:00) [6]
> неугомонный (25.10.07 03:17) [2]
>
> не понял :(
>
Чего не понял?
Чуешь разницу между
> override
и
> overload
?
неугомонный (2007-10-25 03:17:00) [7]не понял :(
какой из методов будет overload?
Джо (2007-10-25 03:10:00) [8]> procedure SetX(X:String);
> procedure SetX(X:Integer);override; ошибка в этой
> строке - Method 'SetX' not found in base class
А че не так? Нету в TCustomControl такого метода и никогда не было.
А если хотите написать overload, то так и пишите: overload.