Конструирование объкта

Тема в разделе "WASM.ZEN", создана пользователем AsmGuru62, 11 июл 2005.

  1. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    Я тут пишу генератор кода для моего IDE и возник вопрос. В С++ есть такое дело: в конструкторе обьекта не вызываются перекрытые методы. Я думаю сделать наоборот в IDE.



    Вопрос знатокам: кто что думает по этому поводу? Есть какая-то причина не делать этого, а делать по модели С++?
     
  2. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан




    Что значит "перекрытые"? Прайветы чтоли? Все нормально вызывается, у конструктора такие же "права" как и у остальных функций-членов.
     
  3. _staier

    _staier New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2003
    Сообщения:
    738
    Адрес:
    Ukraine
    виртуальные не вызываются
     
  4. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    staier



    А прайветы родителя ты и так не вызовешь. В чем собственно вопрос?
     
  5. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    "перекрытые" means overriden.
     
  6. _staier

    _staier New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2003
    Сообщения:
    738
    Адрес:
    Ukraine
    в с++ нельзя вызвать виртуальные методы, перекрытые в описываемом классе



    в дельфи - можно
     
  7. Gordon

    Gordon New Member

    Публикаций:
    0
    Регистрация:
    21 апр 2005
    Сообщения:
    21
    Адрес:
    Russia
    Давно не писал на СИ, но вообще то Дельфи тем и хуже что там вызывается просто inherited, и вызывается метод предка, а в СИ можно вызвать перекрытый метод любого предка просто указанием ClassXXX::Method. В Дельфи подобное можно сделать только с преобразованиями типов и объявлениями левых наследников для доступа к protected методам (вообщем муторно довольно). А в Си красиво и логично.



    Речь идет конечно о виртуальных методах.
     
  8. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    Gordon

    я для класса-предка по моему достаточно написать ::Method
     
  9. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    staier



    Что-то ты темнишь. Дай простенький пример и покажи, что там вызывать нельзя.
     
  10. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    offtop Gordon

    > "В Дельфи подобное можно сделать только с преобразованиями типов и объявлениями левых наследников для доступа к protected методам(вообщем муторно довольно). А в Си красиво и логично"



    Дело вкуса и (дурной) привычки ;)

    Какой вообще смысл в protected методах, если к ним будет разрешен доступ кому угодно откуда угодно ? Protected для того и придуманы, чтобы с одной стороны запретить прямой доступ к ним со стороны "ламеров", научившихся бросать контролы на формы, но с другой стороны оставить возможность изменения функциональности при разработке наследуемых классов. Этим они и отличаются от private и public\published.

    Что касается приведения типов, то это нормальное явление в любых языках (в т.ч. и асме). А синтаксис ClassXXX.Method в дельфи допустим только для class-методов, не оперирующих с полями конкретного экземпляра - ИМХО все строго и логично ;)



    staier

    > "в с++ нельзя.. в дельфи - можно"



    Если это так, то вопрос - почему ?
     
  11. Gordon

    Gordon New Member

    Публикаций:
    0
    Регистрация:
    21 апр 2005
    Сообщения:
    21
    Адрес:
    Russia
    >Какой вообще смысл в protected методах...



    Речь идет о доступе к protected своего же класса. А он по определению должен быть доступен. А в дельфи по умолчанию вызывается метод предка. Если ты по иерархии хочешь пропустить ожного их предков - тут и проблема. В принципе дело вкуса конечно, но это часто нужно на обработчиках, а они к счастью published, так что в принципе приходим к Си варианту в данном конкретном случае.