singlepost

Подскажите ответ на 2 вопросика (С++) << На главную или назад  

1. Объясните разницу между понятиямивиртуальная функцияивиртуальное наследование?
2. Объясните, чем отличаются глобальные статические функции от статических функций, членов классов?

17 ответов в теме “Подскажите ответ на 2 вопросика (С++)”

  1. 7
    Павел Потапов ответил:

    Виртуальную функцию базового класса тоже можно вызвать снаружи, если она public:

    derived_ptr->base::foo();

    Пользовался только однажды. И никому не советую это делать, а также позволять другим это делать… ;)

  2. 6
    Дмитрий Матвеев ответил:

    2 #2,
    Обычную функцию тоже можно переопределить в потомках класса. В таком случае:
    derived_ptr->foo(); // вызов той фу, что определена в потомке
    ((base*) derived_ptr)->foo(); // вызов фу, кот. определена в базовом классе

    Если бы foo() была виртуальной, то в обоих случаях вызывалась бы версия функции из класса-потомка

  3. 5
    Павел Потапов ответил:

    #5 не может быть. Глобальные статические функции доступны только в том модуле, где описаны, если только они не определены их в хедере. В этом случае каждый раз будет генериться новая копия функции.

  4. 4
    Ростислав Чутков ответил:

    #4, по крайней мере в VS они доступны из других модулей. Мне казалось что static использовался для внутренней компоновки только в старых компиляторах.

  5. 3
    Артём Шалхаков ответил:

    2 и еще областью видимости, пожалуй.

  6. 2
    Дмитрий Шашолко ответил:

    2. Статические функции находятся в рамках модуля и на линкер не передаются, т.е. она будет недоступна из других модулей

  7. 1
    Ростислав Чутков ответил:

    1. //www.devdoc.ru/index.php/content/view/virtual_...
    виртуальное наследование – способ множественного наследования. виртуальная функция – вид функции которую можно переопределить в потомках.

    2. пространством имен.

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.