Форум: "Начинающим";
Текущий архив: 2005.11.27;
Скачать: [xml.tar.bz2];
ВнизИнкапсуляция Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.023 c