Alexey Veselovsky писал(а):
Я безусловно рад что вам весело, однако не поделитесь ли поводом столь бурного веселья? Хотелось бы тоже порадоваться.
Будете также радоваться, когда уясните роль языка, как средства поддержки/"противодействия" проектных(ым) решений(ям).
Моё веселье - от осознания (даже на таком маленьком примере!) убожества Си++ именно с точки зрения на него, как на средство проектирования, а не как на инструмент для хитровы..., пардон, изощрённых кодовых примеров, позволяющих показать изворотливость и остроту умища отдельных индивидов.
Данный пример совершенно далёк от какой-то реальной работы и проекта. Тем более высока его ценность. Объясняю. А Вы постарайтесь проникнуться.
В данном примере я объявляю указатель на А, НО присваиваю ему экземпляр В.
То есть само это действие АБСОЛЮТНО ОСМЫСЛЕНО.
Причина объявления именно указателя на А может быть только одна (но она не отражена в примере) - где-то есть нечто, что принимает на входе именно указатели на А, как сущности для каких-то обобщённых, абстрактных, довольно высокоуровневых алгоритмов, ничего про детализацию в наследниках или не знающих, или не желающих знать.
НО!, Прошу ещё раз вспомнить, что инициализирую-то я мой указатель ссылкой на экземпляр типа
В!. И делаю это я (в примере, как части чего-то большего, очевидно!) СОВЕРШЕННО СОЗНАТЕЛЬНО!
Но сам смысл введения наследника от А в виде В подразумевает существования чего-то такого, что или уточняется или отличается в наследниках от того же в предках.
В данном примере (одним из?) таких видимых явных отличий как раз и является "значение по умолчанию". И, по логике оно там абсолютно правильно стоит. Конечно, можно было бы его неким образом через "задержанную инициализацию в конструкторе наследника" провести, но мы знаем классный механизм и способ - "значение аргумента метода по умолчанию". Кроме того, нам известен общий принцип переопределения и перекрытия виртуальных методов. А ну-ка, объединим наши проектные решения с возможностями языка!
Опппа - облом-с!
Оказывается, в случае работы с виртуалами, работает нечто, что поддерживает нашу логику (и работает правильно! "по логике" ИСХОДЯ ИЗ ДИНАМИЧЕСКОГО ТЕКУЩЕГО ТИПА ЭКЗЕМПЛЯРА),а вот другая особенность языка, почему-то "оглядывается" на СТАТИЧЕСКИЙ ТИП! И желаемое проектное решение сливается в унитаз...
Вот поэтому мне - да - смешно! Я этим убожищем, слава Б-гу! не пользуюсь.