Форум: "Начинающим";
Текущий архив: 2007.11.18;
Скачать: [xml.tar.bz2];
Внизработа с классами Найти похожие ветки
← →
неугомонный (2007-10-25 03:00) [0]народ скажите в что делаю не так!!
создаю класс
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;
← →
Джо © (2007-10-25 03:10) [1]> procedure SetX(X:String);
> procedure SetX(X:Integer);override; ошибка в этой
> строке - Method "SetX" not found in base class
А че не так? Нету в TCustomControl такого метода и никогда не было.
А если хотите написать overload, то так и пишите: overload.
← →
неугомонный (2007-10-25 03:17) [2]не понял :(
какой из методов будет overload?
← →
Германн © (2007-10-25 03:25) [3]
> неугомонный (25.10.07 03:17) [2]
>
> не понял :(
>
Чего не понял?
Чуешь разницу между
> override
и
> overload
?
← →
неугомонный (2007-10-25 03:35) [4]нет не чувствую, читал
Архангельского, непонятно :(
вот пытаюсь перекрыть,не получается
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:51) [5]Так и будем пробовать все ключевые слова по порядку, пока не заработает? :)
Неужели у Архангельского ничего нет об основах языка?
override — перекрывает одноименный виртуальный (virtual) или динамический (dynamic) метод предка.
overload — позволяет объявить несколько методов (или процедур/функций) с одинаковым названием, но разными списками формальных параметров.
← →
Джо © (2007-10-25 03:54) [6]Краткий пример:
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 04:00) [7]
> Неужели у Архангельского ничего нет об основах языка?
Риторический вопрос однако.
← →
Amoeba © (2007-10-25 11:08) [8]
> неугомонный (25.10.07 03:35) [4]
>
> нет не чувствую, читал
> Архангельского, непонятно :(
"Гляжу в книгу - вижу фигу"?
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.11.18;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.043 c