private против protected
Модератор: Модераторы
private против protected
В Delphi(TD) была такая особенность - если переменная находилась в private класса, то она была доступна всем копиям классам, а при размещении protected только конкретной копии. Пересев на FPC не заметил тут такого эффекта, и вот сейчас не очень понимаю в чем для FPC разница между этими секциями.
Что такое копии класса?
Наверное это просто "наследники класса"... ( Мда забавная опечатка "мечтают ли электро-овцы о овечке Доли ?"stikriz11 писал(а):Что такое копии класса?
И в пределах одного модуля все могут видеть всё сквозь private и protected, но в Delphi то же самое, это эквивалент «friend class» в C++. Можно выключить через strict private и strict protected, но зачем.
Нет, я имел ввиду влияние секций на распределение памяти для объектов созданных на базе класса. Вот читаю, и ощущение что мне приснилось. Помню что была проблема в Turbo Delphi и помню как решал. Подумал что может ключ какой то был... но похоже патч на Матрицу накотили, и в этой реальности все не так...
Ась ? "Объекты на базе класса" разве это не наследники ? Или может быть это вообще "потусторонний" гибрид Object и Class ?Sharfik писал(а):Нет, я имел ввиду влияние секций на распределение памяти для объектов созданных на базе класса.
ЗЫ
О как я Вас понимаю коллега!Sharfik писал(а):но похоже патч на Матрицу накатили, и в этой реальности все не так...
Есть класс - это описание типа. Есть объект - это экземпляр класса.Sharfik писал(а): для объектов созданных на базе класса
protected - всегда виден в потомке.
private - не виден в потомке.
Если классы объявлены в одном модуле, то видно там все - это как френды у С++.
Есть несколько правил области видимости объекта, которые помогут Вам разобраться со способами доступа к объектам и наследования объектов:
1. Поля, свойства и методы секции public не имеют ограничений на видимость.
2. Поля, свойства и методы секции private, доступны только в методах класса и в функциях, объявленных в том же модуле, где и класс.
3. Поля, свойства и методы секции protected тоже доступны только из методов класса и функций, объявленных в модуле, но они доступны в классах, являющихся потомками, в том числе и объявленных в других модулях.
При описании потомков, Вы можете изменять область видимости методов и свойств. Можно расширять область видимости, но не сужать. Т.е. если есть свойство в секции private, вы можете сделать его public, но не наоборот.
