C++基类子类中,虚函数究竟是怎样判断该调用哪个函数的??

2025-02-23 12:43:05
推荐回答(5个)
回答1:

有虚函数时,每个对象的this指针都指向一个虚函数表(Virtual Table)的地址,这个表里存的就是虚函数的地址。编译的时候就决定了,普通函数调用时直接CALL这个函数的地址,而是虚函数时,是从这个虚表里取地址去调用的。

回答2:

定义了虚函数之后,在执行的时候,系统会自动的匹配与之相对应的合适的成员函数。
这里的话p是指向son的指针,那么他会先调用son里面的成员函数。

回答3:

你问:那么 p->printf();调用的就是子类函数?

原因:由于子类重载了基类的虚函数,所以在子类对象的虚函数表里面的函数地址是子类的,而不是父类的,所以p->printf(),肯定调用的是子类的printf函数了。

回答4:

如果子类实现了的就掉子类,子类没实现的就调父类的。

回答5:

这就是所谓的多态,请看看C++ Primer