Здравствуйте, Аноним, Вы писали:
А>Здравствуйте! Объясните, плз, почему функции базового класса не привязываются к виртуальным функциям интерфейса?
| | Скрытый текст |
| | А>class I
А>{
А>public:
А> virtual void f1(void) = 0;
А>};
А>class A
А>{
А>public:
А> void f1(void) { /*...*/ }
А>};
А>class B : public A, public I
А>{
А> //...
А>};
А>main()
А>{
А> B b;
А>}
А>В итоге будет выдана ошибка о том что класс "B" абстрактный т.к. f1 не определена. Но почему? Чисто технически, если бы f1 была определена в "B" а не в "A", то ее код ничем бы не отличался. Так что мешает компилятору ее использовать? |
| | |
B * b = new B();
A * a = new A();
A * ab = &b;
a->f1(); // f1 не делает virtual call
ab->f1();// f1 не делает virtual call