01.07.2003, 12:29 | #1 |
Соучастник
|
БАГА: Модификаторы методов
версия 3.0.
при попытке скомпилировать следующее: PHP код:
__________________
View Anton Soldatov's LinkedIn profile |
|
01.07.2003, 14:01 | #2 |
Соучастник
|
ЭПИЗОД II
это тоже не компилируется:
PHP код:
то же мне ООП.
__________________
View Anton Soldatov's LinkedIn profile |
|
01.07.2003, 18:15 | #3 |
Moderator
|
Я уже давненько не перечитывал ARM Страуструпа, но боюсь что в C++ тебя постигнет такая же неудача с этими конструкциями.
Модификатор final (его то как раз C++ нету, это из Java пришло) имеет смысл только для методов экземпляра, поскольку механизм "виртуализации" методов для статических методов не применим, так как они вызываются не в контексте экземпляра, соответственно у компилятора нет доступа к таблице виртуальных методов, привязываемой к экземпляру. При вызове статического метода класса, нужно указывать именно тот класс в котором этот метод определен, то есть вызов child:arentMethod() не имеет смысла. В дочерних классах наследуются только методы экземпляра (не статические). |
|
02.07.2003, 05:19 | #4 |
Соучастник
|
Цитата:
Изначально опубликовано fed
Я уже давненько не перечитывал ARM Страуструпа, но боюсь что в C++ тебя постигнет такая же неудача с этими конструкциями. Модификатор final (его то как раз C++ нету, это из Java пришло) имеет смысл только для методов экземпляра, поскольку механизм "виртуализации" методов для статических методов не применим, так как они вызываются не в контексте экземпляра, соответственно у компилятора нет доступа к таблице виртуальных методов, привязываемой к экземпляру. При вызове статического метода класса, нужно указывать именно тот класс в котором этот метод определен, то есть вызов child:arentMethod() не имеет смысла. В дочерних классах наследуются только методы экземпляра (не статические). аргумент 2: более того, final static void method_name - приводится в руководстве разработчика Axapta как правильный пример.
__________________
View Anton Soldatov's LinkedIn profile |
|