| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > прикол ) |
| Автор: tanderbold 16.8.2007, 10:39 | ||||
| Привет всем пишу код:
в таком виде прога выдаёт 1 0 если модифицировать функцию foo() наследника, например так
то прога выдаёт 1 наследник 0 наследник !!!! ))) |
| Автор: Lazin 16.8.2007, 10:49 |
| На строчках 15 и 17, компилятор разве не сказал что не хорошо пытаться вызвать private метод класса. |
| Автор: Fazil6 16.8.2007, 10:50 |
| вопревых это даже не скомпилируется ибо наследование не указано, а вообще параметры поумолчанию подставляются компиллятором на стадии компиляции исходя из типа и поэтому все правильно и никакого прикола тут нет Добавлено через 3 минуты и 24 секунды http://forum.vingrad.ru/forum/topic-163679.html |
| Автор: tanderbold 16.8.2007, 10:59 | ||
| Fazil6, это был просто каркас ) полный код
почему во втором случае выводит во второй строке 0 derived?! такой функции даже нет! Получается что функция наследника вызывается с параметром 0? |
| Автор: Fazil6 16.8.2007, 11:04 |
конечно. Я так и сказал. Какой еще параметр поумолчанию может передать компилятор в эту функцию потвоему? pB имеет тип base и в этом классе foo имеет параметр поумолчанию 0. Его и подставляет. Другое значение ему взять неоткуда. Он ведь не знает какая именно функция будет вызываться вовремя работы. |
| Автор: bsa 16.8.2007, 11:06 |
| tanderbold, http://forum.vingrad.ru/index.php?showtopic=163679&view=findpost&p=1197337 |
| Автор: Xenon 16.8.2007, 16:45 |
| Если у тебя, например, два класса : базовый и производный и в сигнатуре функциий двух этих классов есть аргументы по умолчанию, то аргумент по умолчанию берется из функции, основываясь на статическом типе, а не динамическом - то есть подсунул указатель на базовый класс и берется аргумент из функции базового класса. Блин, не знаю, по-моему не совсем правильно я сформулировал - поправьте. |
| Автор: tanderbold 17.8.2007, 07:48 | ||
| Fazil6, в базовом классе в функции после вывода аргумента не выводится никакой строки!!! Аргумент по умолчанию берётся из базового класса, а тело функции из производного!!!
а почему тогда тело функции производного класса? |
| Автор: MAKCim 17.8.2007, 08:49 |
| tanderbold, дефолтные параметры выводятся исходя из статического типа объекта т. е в первом случае этот тип delivered, поэтому в метод передается 1 во-втором тип base, поэтому передается 0 в обоих случаях вызывается foo() из delivered, потому как полиморфизм |
| Автор: MAKCim 17.8.2007, 09:34 | ||
|
| Автор: tanderbold 17.8.2007, 09:39 |
| MAKCim, спасибо, как раз это и хотел услышать ) |
| Автор: Xenon 17.8.2007, 16:42 |
| Во, MAKCim лаконичнее толкнул мысль |
| Автор: Любитель 20.8.2007, 02:33 |