Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2007.02.18;
Скачать: [xml.tar.bz2];

Вниз

public, private, protected <> static, virtual?   Найти похожие ветки 

 
Den303 ©   (2006-12-20 16:14) [0]

Доброго времени суток всем!
Что-то я сегодня не выспался и туплю :o)
Плиз, ответьте....

Методы с какими модификаторами (public, private, protected) могут быть виртуальными?
Методы с какими модификаторами (public, private, protected) могут быть статическими?


 
Сергей М. ©   (2006-12-20 16:17) [1]


> Den303 ©   (20.12.06 16:14)


В огороде бузина, а в Киеве дядька)

public, private, protected управляют областью видимости идентификаторов и не имеют отношения к виртуальности или статичности методов


 
den303 ©   (2006-12-20 16:35) [2]

Дык это я понимаю, но значит ли это, методы со всеми этими перечисленными модификаторами могут быть и static, и virtual?


 
Сергей М. ©   (2006-12-20 16:39) [3]


> но значит ли это, методы со всеми этими перечисленными модификаторами
> могут быть и static, и virtual?
>


Конечно !

Любой метод можно поместить в любую из секций, вопрос лишь - в видимости этого метода с той или иной "точки" проекта


 
Rule ©   (2006-12-20 16:50) [4]

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


 
den303 ©   (2006-12-20 16:53) [5]

ОК, спасибо!
Что-то, видно, спать надо больше :o)


 
Плохиш ©   (2006-12-20 17:19) [6]


> Rule ©   (20.12.06 16:50) [4]
> не учитывая косяк

С каких пор стандарт языка называется "косяком"?


 
Чапаев ©   (2006-12-20 17:35) [7]

> могут быть и static, и virtual?
и dynamic. ;-)


 
tesseract ©   (2006-12-20 17:46) [8]

вроде только классовые методы должны быть статическими?


 
tesseract ©   (2006-12-20 17:54) [9]

Ошибся просто бывают статическими :-)


 
Чапаев ©   (2006-12-20 18:13) [10]

> [8] tesseract ©   (20.12.06 17:46)
Делфовые классовые методы -- это Сишные статические... ;-)


 
Rule ©   (2006-12-20 18:23) [11]

Плохиш ©   (20.12.06 17:19) [6]
стандарт языка, который называется ООП языком и не соответствующий этому самому ООП - это косяк, а любой документированый косяк - это фича ...


 
tesseract ©   (2006-12-20 22:38) [12]


> Чапаев ©   (20.12.06 18:13) [10]


не угадал :-) классовые методы рекомендуеться делать виртуальными, дабы self можно было сыметь :-)


 
Kolan ©   (2006-12-20 22:51) [13]

> Rule

Это, просто надо правильно писать: strict private :)


 
evvcom ©   (2006-12-21 08:55) [14]

> [4] Rule ©   (20.12.06 16:50)
> ага есть ли смысл помещять виртуальный метод в приват

"можно" и "есть ли смысл" разные понятия. Вопрос звучал "можно ли", "могут ли". Ответили, что могут, про смысл вопроса не было.
Левое ухо чесать правой рукой я тоже не вижу смысла, но ведь можно!


 
Чапаев ©   (2006-12-21 09:37) [15]

> [12] tesseract ©   (20.12.06 22:38)
Во блин... И правда, есть и class...static методы...


 
ors_archangel ©   (2006-12-21 14:56) [16]

Все методы должны быть виртуальными, если бы Делф был поумней, он бы это понял


 
Rule ©   (2006-12-21 15:07) [17]

ors_archangel ©   (21.12.06 14:56) [16]
дааааааа????????????????????


 
Amoeba ©   (2006-12-21 15:21) [18]


> ors_archangel ©   (21.12.06 14:56) [16]
> Все методы должны быть виртуальными, если бы Делф был поумней,
>  он бы это понял

А как, в частности, насчет разницы в скорости вызова статических и виртуальных? А этим ведь дело не исчерпывается.


 
Anatoly Podgoretsky ©   (2006-12-21 15:23) [19]

Он наверно не слышал про классовые методы, которые по определению должны быть статическими.


 
Rule ©   (2006-12-21 15:54) [20]

интересно былобы посмотреть на виртуальный конструктор (во блин как детская игрушка называется :-))


 
Amoeba ©   (2006-12-21 16:07) [21]


> Rule ©   (21.12.06 15:54) [20]
> интересно былобы посмотреть на виртуальный конструктор (во
> блин как детская игрушка называется :-))

Так посмотри на конструктор класса TComponent, к примеру.


 
Palladin ©   (2006-12-21 16:43) [22]


>  [16] ors_archangel ©

не болтайте ерундой


 
Loginov Dmitry ©   (2006-12-21 17:50) [23]

> интересно былобы посмотреть на виртуальный конструктор


И что? Часто очень полезная вешь.


 
jack128 ©   (2006-12-21 18:00) [24]

tesseract ©   (20.12.06 22:38) [12]
классовые методы рекомендуеться делать виртуальными, дабы self можно было сыметь :-)

какое отнашение виртуальность имеет к self ?

Блин, всего 2 десятка постов, а сколько глупостей наговорили..  А сколько еще предстоит наговорить...


 
Rule ©   (2006-12-21 18:39) [25]

да я не о том, :-) я как раз о виртуальном конструкторе как игрушке :-)


 
ors_archangel ©   (2006-12-21 20:30) [26]

Здесь в какой-то статье про это по-мойму даже говорилось: компилятор мог бы делать метод виртуальным, только когда это требуется (т.е. когда для метода указан override-метод в каком-нить потомке): зачем говорить, что "лашадь - это лошадь, потому что мне надо, что бы это была лошадь", лучше конкретно показать, что метод M есть overrrrrrride, если это не так, то в родительском virtualе нет смысла (он может быть с таким же успехом и статическим (при этом скорость как раз возрастёт (это насчёт разницы в скорости))), эта избыточность нужна Борланду, потому что умный компилятор сложнее сделать (конечно, компилировать он будет, возможно, медленнее, но  MSVC-шный по тормознутости, я думаю, ему всё равно, слава Борланду, никогда не догнать :)


 
Чапаев ©   (2006-12-21 20:37) [27]

> [26] ors_archangel ©   (21.12.06 20:30)
> когда для метода указан override-метод в каком-нить потомке
Ну да, то, что Вася Пупкин может написать потомка, учитывать не станем.


> зачем говорить, что "лашадь - это лошадь, потому что мне
> надо, что бы это была лошадь", лучше конкретно показать,
> что метод M есть overrrrrrride
Как я не догадася... Лошадь -- это оверрайд. Кен Кизи фарэва.


 
ors_archangel ©   (2006-12-21 20:48) [28]


> Чапаев ©   (21.12.06 20:37) [27]
> Ну да, то, что Вася Пупкин может написать потомка, учитывать
> не станем.

Какие отличия между "Вася Пупкин написал потомка" и "Я сам написал потомка" в данном контексте, не вижу. Может под .NET, конечно, что-нибудь и изменилось, но за D7 отвечаю, что разницы нет


 
Плохиш ©   (2006-12-21 20:55) [29]


> ors_archangel ©   (21.12.06 20:48) [28]


> но за D7 отвечаю, что разницы нет

Проотвечался.


 
Kolan ©   (2006-12-21 21:01) [30]

> ors_archangel

А как быть если по логике метод перекрывать нельзя? И я хочу чтобы вася пупкин не смог этого сделать...


 
Anatoly Podgoretsky ©   (2006-12-21 21:04) [31]

> Kolan  (21.12.2006 21:01:30)  [30]

Ну так для этого есть reintroduce
Но на Пупкина не повлияешь, он всегда имеет такую возможность на тех же принципах.


 
tesseract ©   (2006-12-21 21:55) [32]


> jack128 ©   (21.12.06 18:00) [24]

class....static не имет доступа к полям и self. т.е не привязан к классу никак. В хелпе  не рекомендуется. Взято из справки по Turbo delphi и рекомендациям по C++ где стого-настрого не рекомендованы глобальные классы.  


> Ну так для этого есть reintroduce



Да он только warning убирает.


> Kolan ©   (21.12.06 21:01) [30]


Strict private , уже было. Пупкиных гнать поганой метлой :-)


> Loginov Dmitry ©   (21.12.06 17:50) [23]


Не сталкивался, inherited рулит :-)


 
Anatoly Podgoretsky ©   (2006-12-21 22:01) [33]

> tesseract  (21.12.2006 21:55:32)  [32]

Вот Вася Пупкин его и убъет и начнет новую ветвь наследования.
Что бы этого не было - оформлять как private


 
tesseract ©   (2006-12-21 22:06) [34]


> Anatoly Podgoretsky ©   (21.12.06 22:01) [33]


И чего мне ega32 вспомнился? :-)


 
Loginov Dmitry ©   (2006-12-22 07:39) [35]

> Не сталкивался, inherited рулит


Если задачи, которые очень тяжко решаются без виртуальных конструкторов. Сталкиваться приходилось.


 
С   (2006-12-22 08:22) [36]

>tesseract ©   (21.12.06 21:55) [32]
>class....static не имет доступа к полям и self

Виртуальность или ее отсутствие никак не влияет на доступность или недоступность Self в  class procedure/function. Просто в них Self - сам класс, а не конкретный объект.
По крайней мере, до D7 включительно.
Я, например, часто пишу типа такого:

class function TMyDlg.Execute: boolean;
begin
 with Self.Create do
 try
   result:= ShowModal = mrok;
 finally
   Free;
 end;
end;


 
Kolan ©   (2006-12-22 10:26) [37]

> Ну так для этого есть reintroduce

Ну он же вначале &laquo;ворнинг&raquo; получит... И задумается.


 
jack128 ©   (2006-12-22 11:53) [38]

tesseract ©   (21.12.06 21:55) [32]
class....static не имет доступа к полям и self. т.е не привязан к классу никак. В хелпе  не рекомендуется.

я ничего про статик и не говорил.  Но для того, чтобы получить доступ к Self в классовом методе совсем не обязательно его делать виртуальным.

tesseract ©   (21.12.06 21:55) [32]
Не сталкивался,

Нагло врешь ;-) Вся VCL на виртуальных конструкторах построена.


 
tesseract ©   (2006-12-22 14:30) [39]


> о для того, чтобы получить доступ к Self в классовом методе
> совсем не обязательно его делать виртуальным.


Да необязательно. Статические методы

Class Static Methods

Like class methods, class static methods can be accessed without an object reference. Unlike ordinary class methods, class static methods have no Self parameter at all. They also cannot access any instance members. (They still have access to class fields, class properties, and class methods.) Also unlike class methods, class static methods cannot be declared virtual.


> tesseract ©   (21.12.06 21:55) [32]Не сталкивался,Нагло
> врешь ;-) Вся VCL на виртуальных конструкторах построена.
>


Да посмотрел,  конструкторы могут быть виртуальными. Я ими напрямую не пользовался.


 
Amoeba ©   (2006-12-22 14:53) [40]


> Да посмотрел,  конструкторы могут быть виртуальными. Я ими
> напрямую не пользовался.
>

Ну если только никогда не создавал формы и компоненты в RunTime. Неужели никогда?



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

Форум: "Основная";
Текущий архив: 2007.02.18;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.55 MB
Время: 0.062 c
2-1169983925
SerJaNT
2007-01-28 14:32
2007.02.18
Проиграть звук


2-1169710706
inkvizitor
2007-01-25 10:38
2007.02.18
3D графика


3-1164675408
Draught
2006-11-28 03:56
2007.02.18
Формат даты в SQL запросе


2-1170276381
Wlad_M
2007-01-31 23:46
2007.02.18
Как вписать недостающий класс в экзешник


15-1169667249
FIL-23
2007-01-24 22:34
2007.02.18
Коды Хемминга





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский