Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ Проблема с переменными...

Автор: Vardes 22.11.2006 2:38

Подскажите в чём разница:

Код

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    end;
TInputVector1 = class(TObject)
  x1:real;
  end;


Код
[/code]
type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    end;
TInputVector1 = class(TObject)
end;
  var
  Form1: TForm1;
  InputVector1:TInputvector1;
x1:real;


Не понимаю того,в чём разница,как обозначать переменную или как переменную класса или как var пар-р....

Автор: volvo 22.11.2006 2:53

Цитата
Не понимаю того,в чём разница,как обозначать переменную или как переменную класса или как var пар-р....
Смотри... Вот, например, можно сделать так:

type
tbuffer1 = class
size: integer
buf: array of byte;
...
end;
var
buf1: tbuffer1;

, а можно - так:
type
tbuffer2 = class
buf: array of integer;
...
end;
var
buf2: tbuffer2; size: integer;

И по первому и по второму варианту будет работать... НО: логически более правильный - первый вариант, т.к. класс должен содержать в себе то, что ему необходимо, а не общаться каждый раз с внешними переменными...

Чувствуешь разницу? Кроме этого, поля класса могут быть приватными (чего не так просто добиться во втором случае), они наследуются (в классе-потомке будет доступ к полю, а в постороннем классе - не будет)...

Автор: Vardes 22.11.2006 3:38

Ну немного стал разбираться...Вот прогу небольшую написал,просто для тренировки классов,вычисляет логарифм четырёх элементов,но почему-то выдаёт ошибку...

Код
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    end;
TInputVector1 = class(TObject)
  x1:real;
  procedure DoSum(var a:real);
  end;
  TInputVector2 =class(TInputvector1)
     x2:real;
     end;
    TInputVector3 =class(TInputvector2)
      x3:real;
        end;
      TInputVector4 =class(TInputvector3)
       x4:real;
        end;
  var
  Form1: TForm1;
  InputVector1:TInputvector1;
  InputVector2:TInputvector2;
  InputVector3:TInputvector3;
  InputVector4:TInputvector4;

  implementation

{$R *.dfm}
procedure TInputVector1.DoSum(var a:real);
begin
a:=ln(a);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
     InputVector1.x1:=1;
     InputVector2.x2:=2;
     InputVector3.x3:=3;
     InputVector4.x4:=4;
     InputVector1.DoSum(InputVector1.x1);
     InputVector2.DoSum(InputVector2.x2);
     InputVector3.DoSum(InputVector3.x3);
     InputVector4.DoSum(InputVector4.x4);
     Memo1.Lines.Add(FloatToStr(InputVector1.x1));
      Memo1.Lines.Add(FloatToStr(InputVector2.x2));
       Memo1.Lines.Add(FloatToStr(InputVector3.x3));
        Memo1.Lines.Add(FloatToStr(InputVector4.x4));
     end;

end.

Автор: volvo 22.11.2006 3:52

blink.gif blink.gif Зачем тебе 4 уровня наследования?

А не работает - потому, что надо сначала создать объект (

     inputvector1 := tinputvector1.create;
... { и так для всех твоих векторов }

), и только потом обращаться к его полям...

Автор: мисс_граффити 23.11.2006 3:56

к первому вопросу... если еще не разобрался.
на грубом примере.
допустим, у тебя есть класс "человек", а в нем поля "руки", "ноги", "уши". логично? это все - составные части человека. с этими полями работают методы "шевелить", "ходить", "слушать" соответственно.
создаешь объект - у тебя нормальный человек.
еще один объект - еще нормальный человек.
это первый случай.

второй случай. есть класс человек (он ничего не имеет). есть объект этого класса - безрукий, безногий, безухий. ты создаешь переменную "руки" (отдельно от человека!).
теперь создаешь еще один объект - калечного человечка. ему придется создавать новые руки или оставлять им одни руки на двоих...
то есть конкретные руки никак к человеку не приделаны - их можно отдать другому или пользоваться вместе. это удобно?