Я понимаю необходимость использования виртуального ключевого слова при наследовании от базовых классов, чтобы избежать проблем неоднозначности, связанных с наследованием алмазов.
Но мой вопрос в том, почему это не поведение по умолчанию в С++ при получении классов, независимо от того, может ли быть проблема с бриллиантом или не может быть?
Есть ли какой-либо «вред» от использования «виртуального» ключевого слова в ситуации, когда наследование бриллианта не представлено?
virtual
, где оно создает алмазное наследование, но это нежелательно. Рассмотрим банковский счет, который является DollarPaymentEndpoint и YenPaymentEndpoint, где каждый из них наследуется от PaymentEndpoint, который имеет элемент AmountReceived. - person David Schwartz   schedule 28.02.2014virtual
не выполняется автоматически. - person Raymond Chen   schedule 28.02.2014explicit
, но я не думаю, что это ключевое слово использовалось, когда была разработана грамматика C++. - person franji1   schedule 28.02.2014explicit
был добавлен для одного конструктора аргументов, а неявное преобразование по умолчанию является ошибкой. Что заставляет вас думать, что не виртуальный дефолт - это ошибка? - person curiousguy   schedule 16.07.2018