ООП, Обьекты и Классы

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Сообщение v-t-l » 08.07.2007 23:15:41

Или путаница в терминологии?
v-t-l
энтузиаст
 
Сообщения: 740
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Сообщение v-t-l » 08.07.2007 23:20:54

zub писал(а):TObject вообщето класс а не объект. я имел ввиду ключевое слово OBJECT

То есть ключевое слово OBJECT создает экземпляр объекта?
По-моему это вы что=то путаете.
v-t-l
энтузиаст
 
Сообщения: 740
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Сообщение zub » 08.07.2007 23:34:22

Код: Выделить всё
type
TObj=object
                    ..........
           end;
TClass=class
                      ..........
             end;
var
     v1:TObj;
     v2:TClass;

после создания переменных
v1-экземпляр типа TObj
v2-указатель на экземпляр типа TClass
собственно в этом и разница между объектами и классами. плюс в классы еще сразу встроенно некоторое количество фич благодаря наследованию от TObject
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Сообщение shade » 09.07.2007 10:51:10

v-t-l
RTFM

Код: Выделить всё
type
  TMyObject = object
    public
      x: Integer;
  end;

var obj1, obj2: TMyObject;
begin
  obj1.x := 10;
  obj2 := obj1;
  obj2.x := 20;
  writeln(obj1.x);
  writeln(obj2.x);
end.
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение v-t-l » 10.07.2007 17:01:04

То есть, объявление переменной объекта неявно создает экземпляр, а переменной класса - не создает.

З.Ы. С объектами никогда плотно не общался, поэтому и ошибся. :oops:
v-t-l
энтузиаст
 
Сообщения: 740
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Сообщение v-t-l » 10.07.2007 17:14:06

Тогда вопрос.
Для того чтобы манипулировать экземпляром объекта внутри какой-нибудь процедуры (не данного объекта), нужно ли передавать его через указатель или var-параметр?
v-t-l
энтузиаст
 
Сообщения: 740
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Сообщение Sergei I. Gorelkin » 10.07.2007 17:58:20

Нужно. Объект ведет себя точно так же, как и запись. Если передавать по значению, то в вызываемой процедуре будет создана локальная копия, и все изменения произойдут в ней, а не в исходном объекте.

И еще - объявление переменной типа object создает не экземпляр, а область памяти нужного размера, забитую мусором. Чтобы там создать объект, нужно вызвать его конструктор. Автоматически он, в отличие от Си, не вызывается...
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение v-t-l » 11.07.2007 15:46:45

Sergei I. Gorelkin
Спасибо.
v-t-l
энтузиаст
 
Сообщения: 740
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Сообщение compiler » 13.07.2007 13:45:18

Мне тоже надо сказать всем БОЛЬШОЕ спасибо.
compiler
новенький
 
Сообщения: 39
Зарегистрирован: 20.02.2007 13:49:12

Re: ООП, Обьекты и Классы

Сообщение VirtUX » 20.02.2010 18:16:27

Имеется объект:
Код: Выделить всё
AnyObj = object
  f1: Byte;
  ...
end;
var
  ao: AnyObj;
  b: Byte;

begin
  b := ao.f1;
end;

Как установить значение 5 в f1, чтобы b получила значение 5, если над объектом AnyObj еще никто не работал? Т.е. задать значение по умолчанию в поле f1.
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: ООП, Обьекты и Классы

Сообщение Дож » 20.02.2010 20:14:38

если над объектом AnyObj еще никто не работал? Т.е. задать значение по умолчанию в поле f1.

Никак.
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47

Re: ООП, Обьекты и Классы

Сообщение svk12 » 21.02.2010 01:05:54

Написать конструктор и в нём присвоить полю нужное значение.
Кстати, без создания экземпляра объекта приведенный код
вызовет AV (SIGSEGV)
svk12
постоялец
 
Сообщения: 408
Зарегистрирован: 09.06.2008 18:42:47

Re: ООП, Обьекты и Классы

Сообщение bw » 21.02.2010 08:59:03

> вызовет AV (SIGSEGV)
С какой стати? Мы ведь не путаем классы и объекты?!

..bw
Аватара пользователя
bw
постоялец
 
Сообщения: 359
Зарегистрирован: 01.12.2005 11:36:23
Откуда: Усть-Илимск

Re: ООП, Обьекты и Классы

Сообщение and » 05.03.2010 18:25:34

А как Object vs Class по накладным расходам? В частности, времени создания/разрушения и (менее критично) расходуемой памяти.
Точнее, интересует ^record vs ^Object vs Class.
С ^record всё ясно, с Class - тоже более-менее. А вот с ^Object пробел: не пользовался ими со времён TP7 - Borland, кажется, настоятельно рекомендовала не использовать одновременно Object и Class (абсолютно не помню, из каких соображений).
Аватара пользователя
and
постоялец
 
Сообщения: 124
Зарегистрирован: 16.09.2009 17:11:01
Откуда: г. Гомель, Беларусь

Re: ООП, Обьекты и Классы

Сообщение Sergei I. Gorelkin » 05.03.2010 19:42:49

В первом приближении их можно считать одинаковыми.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Пред.След.

Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 1

Рейтинг@Mail.ru