虚函数的有关问题
虚函数的问题C/C++ codeA a /*B的继承类A*/B *pB &a /*类A继承于类B(public),printf()为非虚函数*/pB-
虚函数的问题
C/C++ code A a; /*B的继承类A*/ B *pB = &a; /*类A继承于类B(public),printf()为非虚函数*/ pB->printf("abc");
以上的代码,当printf()为非虚函数时,pB->printf("abc")实际上调用的是基类的printf,而此函数的本意是要调用A的printf。
对于这个书上的解释是:编译的时候编译器并不清楚对象所代表的类型。
不是很理解,能否帮忙解释一下。
[解决办法]当没有virtual的时候,运行 pB->printf("abc"); 编译器认为pB是一个父类指针类型,于是到父类成员函数调用执行此方法;
当有virtual的时候编译器就会查找virutal表来决定调用哪一个函数~~
[解决办法]父类指针指向子类空间时,父类指针并不能了解子类对父类有哪些扩充或改变,所以父类的指针也只能调用父类中含有的成员函数~~
[解决办法][解决办法]当你调用的是非虚函数的时候,静态绑定.指针的类型决定了哪个类的函数.