Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2010, 15:47   #1
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию Как в дефли в функцию передаются объекты (классы)

В С++ по-хорошему нужно передавать по ссылке.
Т.е. если передавать переменную A без параметра var, то делфи где-то создаст переменную A2, напишет A2=A, и в функции мы уже будем работать с A2.
С классами дела обстоят так же? Или сразу передаётся адрес?
TwiX вне форума Ответить с цитированием
Старый 13.12.2010, 15:49   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

в Делфи классы всегда хранятся через указатель на данные(С++ Object*)
то есть на стеке их создать нельзя.

поэтому всегда передается указатель.(а через var передастся указатель на указатель)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 13.12.2010, 21:47   #3
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Как тогда понимать, в Caption попадают всё время разные адреса?
Код:
  TA = class
    x: integer;
  end;

implementation

{$R *.dfm}

procedure TForm1.Check(a: TA);
begin
  Caption:=IntToStr(Integer(@a));
  Application.ProcessMessages;
  Check(a);
end;

procedure TForm1.FormClick(Sender: TObject);
begin
  Check(TA.Create);
end;
TwiX вне форума Ответить с цитированием
Старый 13.12.2010, 21:50   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

потому что @ это взятие адреса локальной переменной.
в итоге ты скачешь по стеку адресом.

переменная a это уже указатель на данные класса, не надо брать его адрес.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 13.12.2010, 22:10   #5
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Теперь понятно. Спасибо)
TwiX вне форума Ответить с цитированием
Старый 13.12.2010, 23:17   #6
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Позволю себе ссылочками кинуть

http://www.transl-gunsmoker.ru/2009/...tml#references
http://www.transl-gunsmoker.ru/2010/09/delphi.html
http://www.delphikingdom.ru/asp/view...catalogid=1186

Может, окажется полезным.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Инкапсуляция. Классы и их компоненты. Объекты gessi Общие вопросы C/C++ 0 09.09.2010 16:05
TurboPascal: объекты и классы, прямоугольник с рамочкой ulala Помощь студентам 0 05.11.2009 17:28
TurboPascal: объекты и классы ulala Помощь студентам 1 28.10.2009 17:20
тест на php+mysql. не передаются значения переменных Liana4271 Помощь студентам 2 14.06.2009 01:28