что выведет этот код?
#include <QtDebug> class A { public: virtual void foo(int i = 1) { qDebug() << "A" << i; } }; class B : public A { public: virtual void foo(int i = 100) override { qDebug() << "B" << i; } }; int main() { A *b = new B(); B *bb = dynamic_cast<B *>(b); b->foo(); bb->foo(); return 0; }
Ответ внутри
Ответ(Выделите ниже):
B 1
B 100
Такой странный ответ получается потому, что дефолтный параметр подставляется во время компиляции, а метод для вызова выбирается в рантайме.
Все таки очень плохая практика писать аргумент со значением по умолчанию для виртуальной функции.
ReplyDeleteА сама задачка интересная - из разряда тех, что наглядно проверяют насколько ты понимаешь как все работает внутри.