Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.20;
Скачать: CL | DM;

Вниз

Есть вопросы   Найти похожие ветки 

 
listener   (2005-02-28 18:48) [0]

1) Нужно ли явно указывать const для аргументов ф-ции, если это не string? Вернее, стоит ли?

2) Можно ли полагаться на инициализацию переменных нулями в конструкторе класса? Только честно?

3) Объявлено:
cMyClass = class
  ...
end;
pMyClass = ^cMyClass;
Допустим мы передаем pmc : pMyClass в функцию. Как теперь правильно обращаться с pmc?
cMyClass(pmc).<что-то>  ?

Спасибо!


 
raidan ©   (2005-02-28 18:52) [1]

Удалено модератором


 
clickmaker ©   (2005-02-28 18:53) [2]


> 1) Нужно ли явно указывать const для аргументов ф-ции, если
> это не string? Вернее, стоит ли?

для составных типов (Variant, например) стоит, чтоб не толкать все в стек
> 2) Можно ли полагаться на инициализацию переменных нулями
> в конструкторе класса? Только честно?

можно, если это члены класса


 
begin...end ©   (2005-02-28 18:58) [3]

> listener   (28.02.05 18:48)

3. Если уж так хочется передавать указатель на указатель, то тогда так: pmc^.<что-то>.


 
Алхимик ©   (2005-02-28 18:59) [4]


> 1) Нужно ли явно указывать const для аргументов ф-ции, если
> это не string? Вернее, стоит ли?

Borland рекомендует, см. генофонд (VCL)

> 2) Можно ли полагаться на инициализацию переменных нулями
> в конструкторе класса? Только честно?

В общем случае всегда стоит явно инициализировать переменные.
Неинициализированные переменные часто становятся причинами возникновения ошибок-фантомов. Обычно они имеют нерегулярную природу, и их трудно выявить в процессе отладки. Особенно катастрофичными могут быть последствия при таком обращении с указателями.
http://zeus.sai.msu.ru:7000/programming/delphi/goodpract/

Дальше отвечать лень, ибо не потрудился выбрать конференцию правильно и сформулировать тему вопроса.


 
begin...end ©   (2005-02-28 19:02) [5]

> Алхимик ©   (28.02.05 18:59) [4]

To create an object, call the constructor method on a class type. For example,

MyObject := TMyClass.Create;

This allocates storage for the new object on the heap, sets the values of all ordinal fields to zero, assigns nil to all pointer and class-type fields, and makes all string fields empty.


 
pasha_golub ©   (2005-02-28 19:03) [6]

Удалено модератором


 
Алхимик ©   (2005-02-28 19:17) [7]


> [5] begin...end ©   (28.02.05 19:02)

Так то поля объекта, а в вопросе про некие ПЕРЕМЕННЫЕ говорится.
Мы же нормальные буквоеды... :)


 
Anatoly Podgoretsky ©   (2005-02-28 19:45) [8]

listener   (28.02.05 18:48)  
pMyClass = ^cMyClass;

Судя по этому, безразницы что ты укажешь.


 
Uncle Archi ©   (2005-02-28 21:13) [9]

listener   (28.02.05 18:48)
begin...end ©   (28.02.05 18:58) [3]
3) Вообщето можно и с ^ можно и без, Дельфи всё равно.


 
Anatoly Podgoretsky ©   (2005-02-28 21:18) [10]

Не совсем все равно, два разъименования не равны одному.


 
listener   (2005-02-28 22:32) [11]

Спасибо большое за ответы.

> Если уж так хочется передавать указатель на указатель, то тогда > так: pmc^.<что-то>.
То есть ты хочешь сказать, что можно просто передавать так MyFunc(var pmc : cMyClass)? И не париться с указателями

> Вообщето можно и с ^ можно и без, Дельфи всё равно.
То есть cMyClass(ptr) и cMyClass(ptr^) - это одно и то же?


 
begin...end ©   (2005-02-28 22:37) [12]

> listener   (28.02.05 22:32) [11]

> То есть ты хочешь сказать, что можно просто передавать
> так MyFunc(var pmc : cMyClass)? И не париться с
> указателями

Именно. Да и var тоже не нужно.


 
default ©   (2005-02-28 22:38) [13]

а как стрелочку поставил у заголовка сабжа?


 
default ©   (2005-02-28 22:39) [14]

аа вижу:)


 
listener   (2005-02-28 22:39) [15]

Классы всегда передаются по ссылке?


 
default ©   (2005-02-28 22:41) [16]

listener   (28.02.05 22:39) [15]
нет


 
begin...end ©   (2005-02-28 22:46) [17]

> listener   (28.02.05 22:39) [15]

MyFunc(pmc: cMyClass) - здесь передаётся указатель на созданный экземпляр класса cMyClass. Напишете с var - указатель будет передан по ссылке, напишете без var - по значению. Но передаваться всё равно будет лишь указатель. Потому что любая переменная классового типа (такая, как pmc) - это указатель на область памяти, в которой находится созданный объект.



Страницы: 1 вся ветка

Текущий архив: 2005.03.20;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.045 c
1-1110063483
Луарвик
2005-03-06 01:58
2005.03.20
Как из html строки взять текст без тегов???


1-1109872595
GreySerg
2005-03-03 20:56
2005.03.20
Сколько TMemoryStream максимально можно создать в приложении?


4-1107347991
Artur
2005-02-02 15:39
2005.03.20
Shell


6-1106076658
Alexey8000
2005-01-18 22:30
2005.03.20
Кто нить знает как использовать RAdmin в своих программах?


1-1109074588
Mishenka
2005-02-22 15:16
2005.03.20
Пиктограммы в компоненте...