面试题答案
一键面试普通函数调用机制
在C++中,通过基类指针或引用调用派生类对象的普通函数时,是根据指针或引用的类型(即基类类型)来确定调用哪个函数。也就是说,调用的是基类中定义的普通函数,而不会调用派生类中重写的同名普通函数。
以下是代码示例:
#include <iostream>
class Base {
public:
void normalFunction() {
std::cout << "Base::normalFunction" << std::endl;
}
};
class Derived : public Base {
public:
void normalFunction() {
std::cout << "Derived::normalFunction" << std::endl;
}
};
int main() {
Base* basePtr = new Derived();
basePtr->normalFunction(); // 调用Base::normalFunction
delete basePtr;
return 0;
}
虚拟函数调用机制
通过基类指针或引用调用派生类对象的虚函数时,是根据对象的实际类型(即派生类类型)来确定调用哪个函数。这就是所谓的动态绑定或运行时多态。
以下是代码示例:
#include <iostream>
class Base {
public:
virtual void virtualFunction() {
std::cout << "Base::virtualFunction" << std::endl;
}
};
class Derived : public Base {
public:
void virtualFunction() override {
std::cout << "Derived::virtualFunction" << std::endl;
}
};
int main() {
Base* basePtr = new Derived();
basePtr->virtualFunction(); // 调用Derived::virtualFunction
delete basePtr;
return 0;
}
总结来说,普通函数调用基于指针或引用类型,而虚函数调用基于对象实际类型,虚函数实现了运行时多态,普通函数不具备这种特性。