private против protected

Модератор: Модераторы

private против protected

Сообщение Sharfik » 19.09.2023 03:06:46

В Delphi(TD) была такая особенность - если переменная находилась в private класса, то она была доступна всем копиям классам, а при размещении protected только конкретной копии. Пересев на FPC не заметил тут такого эффекта, и вот сейчас не очень понимаю в чем для FPC разница между этими секциями.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 766
Зарегистрирован: 20.07.2013 01:04:30

Re: private против protected

Сообщение stikriz11 » 19.09.2023 09:58:25

Что такое копии класса?
stikriz11
постоялец
 
Сообщения: 114
Зарегистрирован: 04.09.2023 15:54:19

Re: private против protected

Сообщение Alex2013 » 19.09.2023 10:31:36

stikriz11 писал(а):Что такое копии класса?

Наверное это просто "наследники класса"... ( Мда забавная опечатка "мечтают ли электро-овцы о овечке Доли ?" :wink: )
Alex2013
долгожитель
 
Сообщения: 2957
Зарегистрирован: 03.04.2013 11:59:44

Re: private против protected

Сообщение alexs » 19.09.2023 15:28:30

Наоборот
private - только этот класс
protected - сам класс и его наследники
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: private против protected

Сообщение runewalsh » 19.09.2023 17:42:03

И в пределах одного модуля все могут видеть всё сквозь private и protected, но в Delphi то же самое, это эквивалент «friend class» в C++. Можно выключить через strict private и strict protected, но зачем.
Аватара пользователя
runewalsh
энтузиаст
 
Сообщения: 578
Зарегистрирован: 27.04.2010 00:15:25

Re: private против protected

Сообщение Sharfik » 20.09.2023 02:24:44

Нет, я имел ввиду влияние секций на распределение памяти для объектов созданных на базе класса. Вот читаю, и ощущение что мне приснилось. Помню что была проблема в Turbo Delphi и помню как решал. Подумал что может ключ какой то был... но похоже патч на Матрицу накотили, и в этой реальности все не так...
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 766
Зарегистрирован: 20.07.2013 01:04:30

Re: private против protected

Сообщение Alex2013 » 20.09.2023 10:08:28

Sharfik писал(а):Нет, я имел ввиду влияние секций на распределение памяти для объектов созданных на базе класса.

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

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

Re: private против protected

Сообщение stikriz11 » 20.09.2023 11:48:13

Sharfik писал(а): для объектов созданных на базе класса

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


Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15

Рейтинг@Mail.ru