IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Проблема с переменными..., Не понимаю смысл...
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 131
Пол: Мужской

Репутация: -  0  +


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

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 пар-р....
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
Не понимаю того,в чём разница,как обозначать переменную или как переменную класса или как 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;

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

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


Пионер
**

Группа: Пользователи
Сообщений: 131
Пол: Мужской

Репутация: -  0  +


Ну немного стал разбираться...Вот прогу небольшую написал,просто для тренировки классов,вычисляет логарифм четырёх элементов,но почему-то выдаёт ошибку...
Код
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.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






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

А не работает - потому, что надо сначала создать объект (
     inputvector1 := tinputvector1.create;
... { и так для всех твоих векторов }

), и только потом обращаться к его полям...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


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

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


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 28.09.2020 20:18
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name