|
|
|
Наследование метода класса с дополнением
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Есть ли возможность в каком-нибудь языке программирования реализовывать следующее: class A { function ParentFunc() {...} } class B extends A { function ParentFunc() {...} } И при вызове B->ParentFunc будет выполняться сначала A->ParentFunc, а затем уже то, что в B->Parent Func. В последнее время я пишу на РНР, но несмотря на свою свободу, он при такой записи всё равно затрёт А->ParentFunc. Абстрактные (виртуальные) методы не могут содержать тела, так что не выход... Приходится вызывать явно родительскую функцию (переименовав её, естественно), что не очень красиво... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2009, 17:47:55 |
|
||
|
Наследование метода класса с дополнением
|
|||
|---|---|---|---|
|
#18+
А о какой версии пхп идет речь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2009, 18:10:45 |
|
||
|
Наследование метода класса с дополнением
|
|||
|---|---|---|---|
|
#18+
Frankie, а что мешает вызвать parent::A()? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2009, 18:20:16 |
|
||
|
Наследование метода класса с дополнением
|
|||
|---|---|---|---|
|
#18+
авторАбстрактные (виртуальные) методы не могут содержать тела, так что не выход... Правильно, чисто виртуальные методы класса не могут иметь тела, а вот просто виртуальные вполне себе могут (по крайней мере в цпп). Так что выход... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2009, 18:45:48 |
|
||
|
Наследование метода класса с дополнением
|
|||
|---|---|---|---|
|
#18+
mikhail_nавторАбстрактные (виртуальные) методы не могут содержать тела, так что не выход... Правильно, чисто виртуальные методы класса не могут иметь тела, а вот просто виртуальные вполне себе могут (по крайней мере в цпп). Так что выход...в плюсах могут, а некоторые так просто обязаны, mikhail_n, не морочьте людям голову. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2009, 18:50:24 |
|
||
|
Наследование метода класса с дополнением
|
|||
|---|---|---|---|
|
#18+
an0nymFrankie, а что мешает вызвать parent::A()? Наверное книгу не дочитал ещё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2009, 07:19:20 |
|
||
|
Наследование метода класса с дополнением
|
|||
|---|---|---|---|
|
#18+
an0nymFrankie, а что мешает вызвать parent::A()? Эстетические соображения. Сейчас так и делаю, но это обязывает меня помнить о том, что такой вызов необходим. XDiaBLoan0nymFrankie, а что мешает вызвать parent::A()? Наверное книгу не дочитал ещё. Ага, а Вы даже исходное сообщение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2009, 17:13:06 |
|
||
|
Наследование метода класса с дополнением
|
|||
|---|---|---|---|
|
#18+
Frankiean0nymFrankie, а что мешает вызвать parent::A()? Эстетические соображения. Сейчас так и делаю, но это обязывает меня помнить о том, что такой вызов необходим. XDiaBLoan0nymFrankie, а что мешает вызвать parent::A()? Наверное книгу не дочитал ещё. Ага, а Вы даже исходное сообщение Я как раз всё сообщение дочитал. Модератор: ваш добрый вечер пришел ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2009, 17:51:38 |
|
||
|
Наследование метода класса с дополнением
|
|||
|---|---|---|---|
|
#18+
Frankiean0nymFrankie, а что мешает вызвать parent::A()? Эстетические соображения. Сейчас так и делаю, но это обязывает меня помнить о том, что такой вызов необходим. XDiaBLoan0nymFrankie, а что мешает вызвать parent::A()? Наверное книгу не дочитал ещё. Ага, а Вы даже исходное сообщение так а если не понадобится такой вызов что делать? думаю везде нужно вызывать руками ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2009, 18:02:41 |
|
||
|
Наследование метода класса с дополнением
|
|||
|---|---|---|---|
|
#18+
barrabasтак а если не понадобится такой вызов что делать? думаю везде нужно вызывать руками Если не понадобится, значит имя метода будет другим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2009, 13:08:02 |
|
||
|
Наследование метода класса с дополнением
|
|||
|---|---|---|---|
|
#18+
Frankiebarrabasтак а если не понадобится такой вызов что делать? думаю везде нужно вызывать руками Если не понадобится, значит имя метода будет другим. А как же идеология наследования? Виртуальные функции и всё такое... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2009, 13:10:21 |
|
||
|
Наследование метода класса с дополнением
|
|||
|---|---|---|---|
|
#18+
Frankie, Не понял, такое вас тоже напрягает, выходит?: Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2009, 13:17:04 |
|
||
|
Наследование метода класса с дополнением
|
|||
|---|---|---|---|
|
#18+
XDiaBLoFrankiebarrabasтак а если не понадобится такой вызов что делать? думаю везде нужно вызывать руками Если не понадобится, значит имя метода будет другим. А как же идеология наследования? Виртуальные функции и всё такое... Виртуальные функции - штука чисто организационная. Чтобы коллега не забыл определить метод, который необходим при наследовании от созданного тобою класса. Ещё раз - мне не достаёт возможности чего-то вроде append, когда сначала выполняются тела одноимённых методов предков, а затем твой. SQL_LamerFrankie, Не понял, такое вас тоже напрягает, выходит? Да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2009, 14:44:04 |
|
||
|
Наследование метода класса с дополнением
|
|||
|---|---|---|---|
|
#18+
Сорри, поломал форматирование. XDiaBLoFrankie Виртуальные функции - штука чисто организационная. Чтобы коллега не забыл определить метод, который необходим при наследовании от созданного тобою класса. Ещё раз - мне не достаёт возможности чего-то вроде append, когда сначала выполняются тела одноимённых методов предков, а затем твой. Нифига подобного, не всегда это требуется. Хотя в принципе это было бы наиболее правильно, судя по Роберту Мартину, там про какой то принцип Лискоу было... Так что возможно вы правильно ожидаете такое поведение. Но и навязывать его наверное всё таки не стоит. Frankie SQL_LamerFrankie, Не понял, такое вас тоже напрягает, выходит? Да. Ну да там же никаких проблем, кроме религиозных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2009, 14:52:25 |
|
||
|
Наследование метода класса с дополнением
|
|||
|---|---|---|---|
|
#18+
Frankie, вдругих языка все также. только некоторых достаточно одного слова super() для вызова метода предка. Если реализовать ваше предложение оно не сильно будет удобнее: все равно придется оставить то, что есть для гибкости. А так же надо будет добавить какой-то способ указывать, хочется мне выполнить довесок перед после или вместо метода предка. Походие конструкции есть в АОП, но это не то, что вам нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2009, 16:09:37 |
|
||
|
Наследование метода класса с дополнением
|
|||
|---|---|---|---|
|
#18+
Кстати такое поведение есть по-моему в Visual FoxPro. Там чтобы метод предка не выполнялся нужно явно писать NODEFAULT. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2009, 18:54:16 |
|
||
|
Наследование метода класса с дополнением
|
|||
|---|---|---|---|
|
#18+
FrankieЗдравствуйте. Есть ли возможность в каком-нибудь языке программирования реализовывать следующее: В любом. О чём собственно и сказали. FrankieАбстрактные (виртуальные) методы не могут содержать тела, так что не выход... У меня такое ощущение, что Вы считаете "абстрактные" и "виртуальные" синонимами. На самом деле это не так (во всяком случае вне php). FrankieЭстетические соображения. Сейчас так и делаю, но это обязывает меня помнить о том, что такой вызов необходим. Такой вызов необходим даааалеко не всегда. Именно поэтому его правильно указывать явно. Даже традиционный для с++ - наследников вызов конструктора предка обязательно до тела конструктора потомка - в ряде случаев реально напрягает. belugin4Если реализовать ваше предложение оно не сильно будет удобнее: все равно придется оставить то, что есть для гибкости. А так же надо будет добавить какой-то способ указывать, хочется мне выполнить довесок перед после или вместо метода предка. Оно будет сильно неудобнее. Потому как вообразите "какой-то способ", которым надо будет указать, что метод предка вызывается в середине кода при срабатывании определённого условия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2009, 20:13:49 |
|
||
|
Наследование метода класса с дополнением
|
|||
|---|---|---|---|
|
#18+
softwarerFrankieЭстетические соображения. Сейчас так и делаю, но это обязывает меня помнить о том, что такой вызов необходим. Такой вызов необходим даааалеко не всегда. Именно поэтому его правильно указывать явно. Даже традиционный для с++ - наследников вызов конструктора предка обязательно до тела конструктора потомка - в ряде случаев реально напрягает. Флеш сейчас изучаю, так там такая ситуация: Колин Мук конструктор суперкласса должен вызываться до обращения к любой переменной или методу экземпляра. Если конструктор суперкласса не будет вызван явно, компилятор автоматически добавит вызов конструктора суперкласса без аргументов. И наконец, ключевое слово super не должно использоваться в методе-конструкторе более одного раза. А в С++ точно обязательно до всего тела? А то я вот точно не помню уже, запутался уже во всех этих языках. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2009, 07:47:13 |
|
||
|
Наследование метода класса с дополнением
|
|||
|---|---|---|---|
|
#18+
XDiaBLoКолин Мук конструктор суперкласса должен вызываться до обращения к любой переменной или методу экземпляра. Это ещё не худший вариант. По крайней мере он позволяет то, что меня сильно напрягало в Яве: Код: plaintext 1. 2. 3. 4. 5. 6. 7. А вот чего не позволяет и этот вариант - сейчас в яве может и можно, а тогда, например, пришлось очень извращаться, чтобы реализовать следующее (прошу прощения за возможные ошибки в названиях классов, таки много лет прошло): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. XDiaBLoЕсли конструктор суперкласса не будет вызван явно, компилятор автоматически добавит вызов конструктора суперкласса без аргументов. В целом я совершенно не понимаю тупого копирования вызванных реализацией особенностей C++ в те языки, где реализация совершенно другая. Но это уже отдельная песня. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2009, 09:14:04 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=36173485&tid=1344276]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
176ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 185ms |
| total: | 421ms |

| 0 / 0 |
