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

Вниз

Инкапсуляция   Найти похожие ветки 

 
John Doe ©   (2005-11-08 16:50) [0]

Здраствуйте.
Вот код:

type
 TCar = class(TObject)
   private
     Acceleration: Word;
     Speed:        Word;
     Grip:         Word;
     Durability:   Word;
 end;

 TMitsubishi = class(TCar)
 protected
   Model: Word ;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var NewCar: TMitsubishi;
begin
 NewCar.Acceleration:=4;
end;


Не пойму.
Я имею возможность изменить значение поля Acceleration,через обьект-потомок класса.
Но в то же время,ведь обьявил поля класса TCar,в разделе [B]private[/B],а не protected.
Доступ он давать не должен,вроде...

Читаю М.В.Сухарев,"Основы Delphi-Профессиональный подход":
...."целостность данных не может быть на-
рушена вызывающими подпрограммами, [B]если только они не находятся в
одном модуле с описываемым классом[/B], то есть, в данном"...
А если мне надо,чтоб никто не видел поля TCar,независимо от модуля,в котором этот класс

описан.Что тогда делать.
Заранее спасибо.


 
Внук ©   (2005-11-08 16:53) [1]

Не давать дописывать код в свой модуль :)


 
Digitman ©   (2005-11-08 16:53) [2]


> Доступ он давать не должен,вроде


доступ к private-членам класса имеет любой , кто находится в ТОМ же юните, что и тот самый класс


 
John Doe ©   (2005-11-08 17:03) [3]


> Не давать дописывать код в свой модуль

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

PS.Кстати,а никто и не заметил ошибки.
Я не создал обьект.
NewCar:=TMitsubishi.Create;
:-)


 
Digitman ©   (2005-11-08 17:04) [4]


> Кстати,а никто и не заметил ошибки


вплоть до end., который ты тоже, кстати, не написал, у тебя там м.б. еще туева хуча ошибок) ... но к сабжу они вряд ли имеют отношение


 
John Doe ©   (2005-11-08 17:07) [5]


> вплоть до end.

:-)
Это я не в редакторе кода писал.

Ну что ж.
Спасибо всем.


 
Digitman ©   (2005-11-08 17:11) [6]


> John Doe ©   (08.11.05 17:07) [5]


да и логика тоже страдает)

поле Model, по всей очевидности должно быть объявлено отнюдь не в TMitsubishi, а в некоем TBrandnameCar, который, в свою очередь, будет прямым или непрямым наследником TCar... а уж TMitsubishi будет прямым или непрямым наследником TBrandnameCar


 
Игорь Шевченко ©   (2005-11-08 18:05) [7]


> А если мне надо,чтоб никто не видел поля TCar,независимо
> от модуля,в котором этот класс


Это надо версию Delphi 2005, там в языке появился модификатор strict, который и делает то, что тебе надо.

Для того, чтобы решить проблему в ранних версиях, достаточно просто вынести объявления классов в отдельный модуль.



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

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

Наверх




Память: 0.48 MB
Время: 0.04 c
14-1131291947
Piter
2005-11-06 18:45
2005.11.27
Какие чипсеты поддерживают DDR-2?


14-1131116155
suharew
2005-11-04 17:55
2005.11.27
Куда делась вкладка Report в Delphi7


14-1130982517
-[ HAWK ]-
2005-11-03 04:48
2005.11.27
Прикрепление скинов


2-1131451657
San1
2005-11-08 15:07
2005.11.27
Элементарный код, а не работает. Подскажите в чем дело.


6-1124234200
Троян
2005-08-17 03:16
2005.11.27
Как узнать входящий/исходящий трафики???...