Страница 1 из 1

private против protected

СообщениеДобавлено: 19.09.2023 03:06:46
Sharfik
В Delphi(TD) была такая особенность - если переменная находилась в private класса, то она была доступна всем копиям классам, а при размещении protected только конкретной копии. Пересев на FPC не заметил тут такого эффекта, и вот сейчас не очень понимаю в чем для FPC разница между этими секциями.

Re: private против protected

СообщениеДобавлено: 19.09.2023 09:58:25
stikriz11
Что такое копии класса?

Re: private против protected

СообщениеДобавлено: 19.09.2023 10:31:36
Alex2013
stikriz11 писал(а):Что такое копии класса?

Наверное это просто "наследники класса"... ( Мда забавная опечатка "мечтают ли электро-овцы о овечке Доли ?" :wink: )

Re: private против protected

СообщениеДобавлено: 19.09.2023 15:28:30
alexs
Наоборот
private - только этот класс
protected - сам класс и его наследники

Re: private против protected

СообщениеДобавлено: 19.09.2023 17:42:03
runewalsh
И в пределах одного модуля все могут видеть всё сквозь private и protected, но в Delphi то же самое, это эквивалент «friend class» в C++. Можно выключить через strict private и strict protected, но зачем.

Re: private против protected

СообщениеДобавлено: 20.09.2023 02:24:44
Sharfik
Нет, я имел ввиду влияние секций на распределение памяти для объектов созданных на базе класса. Вот читаю, и ощущение что мне приснилось. Помню что была проблема в Turbo Delphi и помню как решал. Подумал что может ключ какой то был... но похоже патч на Матрицу накотили, и в этой реальности все не так...

Re: private против protected

СообщениеДобавлено: 20.09.2023 10:08:28
Alex2013
Sharfik писал(а):Нет, я имел ввиду влияние секций на распределение памяти для объектов созданных на базе класса.

Ась ? "Объекты на базе класса" разве это не наследники ? Или может быть это вообще "потусторонний" гибрид Object и Class ?
ЗЫ
Sharfik писал(а):но похоже патч на Матрицу накатили, и в этой реальности все не так...

О как я Вас понимаю коллега! :wink: ( Вспоминаю "нулевые версии " лазаруса где временами не работали совершенно казалось бы привычные конструкции и "абсолютно тупые" куски легаси-кода взятые из дельфи или турбо-паскаля, ау ж что творилось в "KOL + MCK" это вообще "байтораздирающее зрелище". Но кстати многое из "странного поведения" так и осталось в FPC и Лазарусе, но я просто научился избегать части "ненадежных конструкций" и старого "наследуемого кода" + немного изменил свои привычки в кодировании ) ) .

Re: private против protected

СообщениеДобавлено: 20.09.2023 11:48:13
stikriz11
Sharfik писал(а): для объектов созданных на базе класса

Есть класс - это описание типа. Есть объект - это экземпляр класса.
protected - всегда виден в потомке.
private - не виден в потомке.
Если классы объявлены в одном модуле, то видно там все - это как френды у С++.
Есть несколько правил области видимости объекта, которые помогут Вам разобраться со способами доступа к объектам и наследования объектов:
1. Поля, свойства и методы секции public не имеют ограничений на видимость.
2. Поля, свойства и методы секции private, доступны только в методах класса и в функциях, объявленных в том же модуле, где и класс.
3. Поля, свойства и методы секции protected тоже доступны только из методов класса и функций, объявленных в модуле, но они доступны в классах, являющихся потомками, в том числе и объявленных в других модулях.
При описании потомков, Вы можете изменять область видимости методов и свойств. Можно расширять область видимости, но не сужать. Т.е. если есть свойство в секции private, вы можете сделать его public, но не наоборот.