crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Задачка №2, проверяем знания, не используем компилятор...
ViGOur
  опции профиля:
сообщение 9.4.2008, 13:51
Сообщение #1


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Не пользуемся компилятором!

Какой результт будет?
#include <iostream>

struct A
{
  virtual int foo(int x = 5)
  {
    return x * 2;
  }
};

struct B : public A
{
  int foo(int x = 10)
  {
    return x * 3;
  }
};

int main(int argc, char** argv)
{
  A* a = new B;

  std::cout << a->foo() << std::endl;

  return 0;
}
Сразу скажу не спешите, хорошенько подумайте, не все так явно как кажется. ;)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 9.4.2008, 14:00
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


опять скомпилил, щас точно крышу сорвет :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 9.4.2008, 14:01
Сообщение #3


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


:lol:

поэтому я и говорю, что не нужно компилить, а нужно думать... ;)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Andrew Selivanov
  опции профиля:
сообщение 9.4.2008, 14:06
Сообщение #4


Участник
**

Группа: Участник
Сообщений: 249
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 3

Спасибо сказали: 15 раз(а)




Репутация:   6  


Короче мы - плохо владеем кунг-фу :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Leprecon_*
сообщение 9.4.2008, 14:15
Сообщение #5





Гости








    


Непонятно почему Флекс не отвечает :)
15 должно быть. По идее все просто.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 9.4.2008, 14:30
Сообщение #6


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Цитата(Leprecon @ 9.4.2008, 15:15) *
Непонятно почему Флекс не отвечает :)
Он ответил по аське... :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
archimed7592
  опции профиля:
сообщение 9.4.2008, 14:40
Сообщение #7


Участник
**

Группа: Участник
Сообщений: 127
Регистрация: 27.12.2007
Из: Moscow
Пользователь №: 56

Спасибо сказали: 0 раз(а)




Репутация:   0  


15 будет, ибо default value выбирается статически(5 для A::foo), а конкретная реализация динамически(x * 3 для B::foo) :).
Где-то, то ли в рекомендациях Саттера-Александреску, то ли у Мейрса, то ли вовсе в Boost library development guide упоминается о том, что ни в коем случае нельзя изменять дефолтное значение аргумента у виртаульной ф-ции из-за таких вот косяков.
Кажись в советах Мейрса...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
archimed7592
  опции профиля:
сообщение 9.4.2008, 14:42
Сообщение #8


Участник
**

Группа: Участник
Сообщений: 127
Регистрация: 27.12.2007
Из: Moscow
Пользователь №: 56

Спасибо сказали: 0 раз(а)




Репутация:   0  


Давай следующую задачу :D
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.3.2024, 12:20