新浪微博C++面试题及参考答案
多态是什么?请详细解释其实现原理,例如通过虚函数表实现。
多态是面向对象编程中的一个重要概念,它允许不同的对象对同一消息或函数调用做出不同的响应,使得程序具有更好的可扩展性和灵活性。
在 C++ 中,多态主要通过虚函数来实现,其底层原理与虚函数表密切相关。当一个类中包含虚函数时,编译器会为该类创建一个虚函数表,虚函数表是一个存储类中虚函数地址的数组。在类的对象内存布局中,会有一个额外的指针,通常称为虚指针,它指向该类的虚函数表。当通过基类指针或引用调用虚函数时,实际上是通过虚指针找到对应的虚函数表,再根据虚函数在表中的偏移量找到并调用具体的虚函数。这样,在运行时就可以根据对象的实际类型来决定调用哪个类的虚函数,从而实现多态性。例如,有一个基类Shape
和两个派生类Circle
和Rectangle
,它们都重写了draw
虚函数。当通过基类指针调用draw
函数时,会根据指针所指向的实际对象类型来调用相应派生类的draw
函数,这就是多态的体现。
解释智能指针的概念,并说明 C++11 中新增的智能指针有哪些?
智能指针是一种用于管理动态分配内存的对象