派生类中的虚函数可以访问父类的虚函数,机制是什么?该怎么解决
派生类中的虚函数可以访问父类的虚函数,机制是什么?
看代码:
dev_class的虚函数表中,dev_class::v_func1()应该把base_class::v_func1()覆盖掉了,但是为什么还可以访问base_class::v_func1()呢?base_class::v_func1()的函数指针放在哪了呢?
求教,谢谢!
------解决方案--------------------
这个不通过虚函数指针来调用, 和普通函数调用一样, 编译器直接把函数地址插入到调用的地方.
------解决方案--------------------
------解决方案--------------------
虚函数也是函数。子类的函数是可以调用父类的函数的。所以子类的虚函数是可以调用父类的虚函数的。vptr中是存放了虚函数的地址,但是并不是所有访问虚函数都得通过vptr。
有啥错误,敬请指正
------解决方案--------------------
当派生类和父类有同名的虚函数的时候,派生类实际上并没有覆盖调父类的方法,当要访问父类同名方法的时候,可以通过base::method的方式调用!
看代码:
- C/C++ code
virtual void dev_class::v_func1() { base_class::v_func1(); cout << "This is dev_class's v_func1()" << endl; }
dev_class的虚函数表中,dev_class::v_func1()应该把base_class::v_func1()覆盖掉了,但是为什么还可以访问base_class::v_func1()呢?base_class::v_func1()的函数指针放在哪了呢?
求教,谢谢!
------解决方案--------------------
这个不通过虚函数指针来调用, 和普通函数调用一样, 编译器直接把函数地址插入到调用的地方.
------解决方案--------------------
------解决方案--------------------
虚函数也是函数。子类的函数是可以调用父类的函数的。所以子类的虚函数是可以调用父类的虚函数的。vptr中是存放了虚函数的地址,但是并不是所有访问虚函数都得通过vptr。
有啥错误,敬请指正
------解决方案--------------------
当派生类和父类有同名的虚函数的时候,派生类实际上并没有覆盖调父类的方法,当要访问父类同名方法的时候,可以通过base::method的方式调用!