> -- Vlad писал(а):
> Ваши размышления вполне понятны. Но я уверен, что вы поймете и такое размышление. Пользователь класса A, вызывая его метод с дефолтовым параметром, может быть уверен, что в качестве параметра подставится именно то, что он видит в объявлении класса А, а не что-то перекрытое в его наследнике только потому, что функция оказалась виртуальной. А если нужна виртуальность дефолтового параметра, то это делается явно - заводится еще одна виртуальная функция. Лично мне оба этих размышления кажутся равноценными по осмысленности.Понимаю. Но принять - решительно отказываюсь.
А если я - пользователь класса В и ожидаю, что, не смотря на обобщённый указатель (например в коллекции) у меня наследники будут иметь правильно инициализированные поля класса (которые через параметры по умолчанию получили свои значения)?
Вы советуете "завести ещё одну виртуальную функцию?" ОК, посмотрим и на это.
Во-первых, я могу не иметь доступа к исходникам класса А. Точка.
Во-вторых, для "пользователя класса А", буде появляется параметр по умолчанию, УЖЕ ПРОСТО ПО СМЫСЛУ ВСЁ РАВНО, КАК БУДЕТ ПРОИНИЦИАЛИЗИРОВАН ЭКЗЕМПЛЯР А (ИЛИ ЕГО НАСЛЕДНИК). Собственно для того мы параметр по умолчанию и втулили. А вот пользователю класса В - уже - НЕТ, НЕ ВСЁ РАВНО. Теперь уже смысл факта  переопределения умолчания как раз в том, что экземпляры В чем-то и отличаются от экземпляров А (там одно умолчание, здесь - другое - всё ОК - "так задумано")... И - что? Получается, здесь язык ставит препоны для реализации нашего решения о различии?
"Пользователи класса А" так и будут работать в терминах и понятиях уровня класса А (более обощённые алгоритмы). А конкретика поведения и наполнения - в наследниках. Но тут мы получили противоречие, исходящее из конкретного свойства языка.

Пока, что Ваши доводы меня не убеждают. Может быть Вы, как более плотно работающий с этим, извиняюсь за выражение, языком программирования, укажете (по-конкретнее) на рассуждения автора языка или комитетчиков по поводу обоснования такого поведения?