我一直在阅读有关虚拟功能的信息并发现,
VF 用于继承类的多态性。
因此,如果一个类和派生类都具有相同的函数名,则 VF 会将相应的函数绑定到函数调用。
即,如果所讨论的函数在基类中被指定为虚拟函数,则将调用派生类的函数。如果它不是虚拟的,则将调用基类的函数。
默认情况下在 Java 中:所有函数都是虚拟 C++:非虚拟,可以在 Java 中通过使用 final、private 访问修饰符将其变为虚拟,而在 C++ 中使用 Virtual 关键字将函数变为虚拟。
基于上述理论,我编写了代码:
#include <iostream>
class base{
public :
virtual void function1(){
std::cout<<"BaseVirtual"<<std::endl;
}
void function2(){
std::cout<<"Base NonVirtual"<<std::endl;
}
};
class derieved: public base
{
public :
void function1(){
std::cout<<"Derieved Virtual"<<std::endl;
}
void function2(){
std::cout<<"Derieved NonVirtual"<<std::endl;
}
};
int main()
{
base b1;
derieved d1;
b1.function1();
b1.function2();
d1.function1();
d1.function2();
}
现在基于事实,如果它是一个虚函数,那么只调用派生类函数,我对上述程序的输出应该是:
BaseVirtual
Base NonVirtual
Derieved Virtual
Base NonVirtual
然而,结果是:
BaseVirtual
Base NonVirtual
Derieved Virtual
Derieved NonVirtual
这当然是对的。所以我的问题是输出完全违反了语句如果有问题的函数在基类中被指定为虚拟,那么将调用派生类的函数。如果它不是虚拟的,则将调用基类的函数。通话:
d1.function2();