Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

работа с классами


неугомонный ©   (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.


Наверх

Титульная страница Поиск, карта сайта Написать письмо