crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Задачка в общем и не задачка
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Влад Дата 24.8.2009, 9:38
  1. c(); По правилу поиска имен, будет найдена функция A::operator()(). При ее выполнении, будет произведен вызов A::func(), поскольку func() - невиртуальная и связывание произойдет еще на этапе компиляции.
2. c.func(); А вот при этом вызове будет напрямую вызвана функция C::func(), разумеется.
Поэтому вывод будет:
Цитата
class A
class C
kwisp Дата 21.8.2009, 22:32
  я вот под пивом и то верно ткнул.
надо чего-нить с шаблонами и множественным наследованием сообразить
что бы прям уххх как проняло.
berserk Дата 21.8.2009, 16:41
 
Цитата(Kagami @ 11.2.2009, 11:01) *
Мне кажется что ответ С С
Оператор () вызывает на func() без указания имени класса, поэтому мне кажется что вызывается C::func()
Ну а вызов func() естественно будет C::func().
Если объявить функцию виртуальной, ничего не изменится

UPD: проверил себя на компиляторе и расстроился :(
Зато хоть про виртуальную версию оказался прав :)


Также проголосовал((( надо бы книжку почитать
Kagami Дата 11.2.2009, 10:48
  Я голосовал :) Первым. Просто комментарий только сейчас написал
ViGOur Дата 11.2.2009, 10:08
 
Цитата(Kagami @ 11.2.2009, 10:01) *
UPD: проверил себя на компиляторе и расстроился :(
Это не повод для расстройства, а повод для освежения памяти чтением книг. Всего ведь не упомнишь. :)

Kagami, чего не проголосовал?
Kagami Дата 11.2.2009, 10:01
  Мне кажется что ответ С С
Оператор () вызывает на func() без указания имени класса, поэтому мне кажется что вызывается C::func()
Ну а вызов func() естественно будет C::func().
Если объявить функцию виртуальной, ничего не изменится

UPD: проверил себя на компиляторе и расстроился :(
Зато хоть про виртуальную версию оказался прав :)
ViGOur Дата 10.2.2009, 20:40
 
Цитата(void* @ 10.2.2009, 20:36) *
хорошая тема, давайте побольше таких задачек кидать, охота мозги размять хоть немного
Договорились! :)

Сами также при случае создавайте темы с подобными задачками.
void* Дата 10.2.2009, 20:36
  проголосовал за А С
вроде бы все логично, вначале вызывается operator() класса A, т.к. он public и наследование public, ну а затем C::func()
если будет виртуальной... то так же само будет я думаю

П.С. хорошая тема, давайте побольше таких задачек кидать, охота мозги размять хоть немного :)


все правильно, только что проверил в компиляторе :) значит я прав

блин, а вот насчет виртуальной функции я недостаточно подумал и ошибся :)
ViGOur Дата 10.2.2009, 20:05
  Желательно пишем, почему вы считаете, что будет именно этот ответ, а не другой. :)
ViGOur Дата 10.2.2009, 17:48
  Мы же все не глупые, так что получаем ответ не используя компилятор! :)
#include <iostream>

class A
{
public:
    void operator()()
    {
        func();
    }
    void func()
    {
        std::cout << "class A" << std::endl;
    }
};

class B: public A
{
public:
    void func()
    {
        std::cout << "class B" << std::endl;
    }
};

class C: public B
{
public:
    void func()
    {
        std::cout << "class C" << std::endl;
    }
};


int main(int argc, char *argv[])
{

    C c;
    c();

    c.func();

    return 0;
}
И для тренировки мозга, каков будет результат, если func сделать виртуальной функцией? :)

То что ниже этой темы читаем после того, как ответили на задачку... ;)
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 10.7.2025, 7:07