Помощь - Поиск - Пользователи - Календарь
Полная версия: ООП во FP
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Free Pascal, Pascal ABC и другие
Страницы: 1, 2
compiler
Цитата(volvo @ 9.07.2007 13:28) *
4) Уровень доступа published
а можна тут по подробней, а то я не могу понять...
Цитата(volvo @ 9.07.2007 13:28) *
+ еще одно отличие: operators overloading прекрасно работает с Object-ами, но с Class-сами происходят очень непонятные вещи...
спасибо за предупреждение
Цитата(volvo @ 9.07.2007 13:28) *
Что ты думаешь будет делаться в этом фрагменте:
  o1.p();
?
если мы его немног видоизменим, то ничего страшного...
{$mode objfpc}
{$STATIC ON}
unit e1;
interface
type
o1 = class
i:integer; static;//кто придумал задавать параметр через разделитель?
class procedure p();

end;
implementation
procedure o1.p();
begin
inc(self.i);
end;
end.
compiler
где можна посмотреть конструктор для class-а, с инициализацией и вызовом в главной прогграмме?
compiler
и деструктор(имея указатель на уничтожаемый обьект)

добавлено
помогите!
volvo
Модуль:
unit _u;

interface
type
T = object
private
_value: integer;

public
property value: integer read _value write _value;

constructor create(x: integer = 10);
destructor destroy();
end;

implementation

constructor T.create(x: integer);
begin
value := x;
//
end;

destructor T.destroy();
begin
//
end;

end.


Программа:
uses _u;

var
my_obj: ^T;

begin
new(my_obj, create(17)); // инициализация
writeln(my_obj^.value); // вызов
dispose(my_obj, destroy()) // удаление
end.

compiler
volvo, спасибо большое, твоя программка заставила меня порыться в руководстве, узнать много нового, но не мог бы ты написать тоже для class-а...
volvo
Цитата(ref.pdf)
6.2. Class instantiation
Remember that a class is a pointer to an object, so when a variable of some class is declared, the compiler just allocates a pointer, not the entire object.

Следовательно, в модуле меняешь в определении типа T слово Object на Class, а программу переписываешь так:
uses _u;

var
my_obj: T;

begin
my_obj := T.create(17);
writeln(my_obj.value);
my_obj.destroy();
end.

Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.