Мне нравятся результаты этого кода, но мне было любопытно, можно ли назвать B :: VFunc() из main()? Я знаю, что запись B::VFunc();
внутри C вызовет его, но можно ли вызвать функцию извне объекта?Могу ли я позвонить VFunc из-за пределов объекта?
#include <cstdio>
class I { public: virtual void VFunc()=0; };
class B : public I { public: void VFunc() { printf("B\n"); } };
class C : public B { public: void VFunc() { printf("C\n"); } };
int main(){
C v;
B&i = v;
i.VFunc();
}
выход:
C
Я не знал, что вы можете это сделать. +1 –
Вам даже не нужна ссылка 'B', она может быть применена непосредственно к объекту' C': 'vB :: VFunc(); ' –
@ DavidRodríguez-dribeas да, это возможно. Я просто скопировал код OP и применил к нему решение, но вы совершенно правы: D. – mfontanini