Показать сообщение отдельно
  #2  
Старый 05.12.2007, 15:58
Аватар для Rokuell
Rokuell Rokuell вне форума
Активный
 
Регистрация: 27.12.2006
Адрес: Псков
Сообщения: 274
Версия Delphi: Delphi 7
Репутация: 497
Восклицание Матчасть

Очень рекомендую учебник: "С. Бобровский. Delphi7. Учебный курс"

Примеры:
1) Инкапсуляция

Добавляешь в проект два новых модуля Unit2 и Unit3;

В Unit2 в раздел interface:
Код:
type
  TOne = class(TObject)
  private
   function F1(x,y:integer):integer;
  public
   function F2(x,y:integer):integer;
   function F3(x:integer):integer;
  end;
в раздел implementation:
Код:
function TOne.F1(x, y: integer): integer;
begin
 Result:= x + y;
end;

function TOne.F2(x, y: integer): integer;
begin
 Result:= x*y + Self.F1(x,y);  // x*y + x + y
end;

function TOne.F3(x: integer): integer;
begin
 Result:= x + 2;
end;
В Unit3 в раздел interface:
ссылку на второй модуль
Код:
uses Unit2;
и
Код:
type
  TTwo = class(TOne)
  public
   function F2(x,y:integer):integer;
  end;
в раздел implementation:
Код:
function TTwo.F2(x, y: integer): integer;
begin
 Result:=x*x*y+Self.F3(y); // x*x*y+y+2
  // 2) Наследование
  // функция F3 наследуется от родительского класса TOne  
end;

Т.к функция F1 класса TOne объявлена в разделе private,
то она видна только в даннов классе(ну и в модуле, где описан класс),
о вот функции F2 и F3 можно свободно использовать.

3) Полиморфизм

теперь в главный модуль:
добавить ссылки на Unit2 и Unit3;
и, например, по клику на кнопке:
Код:
var obj1:TOne;
     obj2:TTwo;
begin
 obj1 := TOne.Create;
 obj2 := TTwo.Create;

 ShowMessage('x=3, y=5, F2='+IntToStr(obj1.F2(3,5))); // 3*5+3+5=23
 ShowMessage('x=3, y=5, F2='+IntToStr(obj2.F2(3,5))); // 3*3*5+y+2=52
 // - вот пример полиморфизма - вызывается метод класса TTwo
 // а вот чтобы вызвать родительский метод F2 надо:
 ShowMessage('x=3, y=5, F2='+IntToStr(TOne(obj2).F2(3,5))); // 3*5+3+5=23

 obj2.Free;
 obj1.Free;
end;
Вложения
Тип файла: zip Пример.zip (3.9 Кбайт, 13 просмотров)
Ответить с цитированием