C++的多态如何在编译和运行期实现

多态是什么?简单来说,就是某段程序调用了一个API接口,但是这个API有许多种实现,根据上下文的不同,调用这段API的程序,会调用该API的不同实现。今天我们只关注继承关系下的多态。

还是得通过一个例子来看看C++是怎样在编译期和运行期来实现多态的。很简单,定义了一个Father类,它有一个testVFunc虚函数哟。再定义了一个继承Father的Child类,它重新实现了testVFunc函数,当然,它也学习Father定义了普通的成员函数testFunc。大家猜猜程序的输出是什么?

[cpp]

#include <iostream>    using namespace std;      class Father   {   public:       int m_fMember;          void testFunc(){           cout<<"Father testFunc "<<m_fMember<<endl;       }       virtual void testVFunc(){           cout<<"Father testVFunc "<<m_fMember<<endl;       }       Father(){m_fMember=1;}   };      class Child : public Father{   public:       int m_cMember;       Child(){m_cMember=2;}              virtual void testVFunc(){cout<<"Child testVFunc "<<m_cMember<<":"<<m_fMember<<endl;}       void testFunc(){cout<<"Child testFunc "<<m_cMember<<":"<<m_fMember<<endl;}       void testNFunc(){cout<<"Child testNFunc "<<m_cMember<<":"<<m_fMember<<endl;}   };         int main()   {       Father* pRealFather = new Father();       Child* pFalseChild = (Child*)pRealFather;       Father* pFalseFather = new Child();              pFalseFather->testFunc();       pFalseFather->testVFunc();          pFalseChild->testFunc();       pFalseChild->testVFunc();           pFalseChild->testNFunc();              return 0;   }  

同样调用了testFunc和testVfunc,输出截然不同,这就是多态了。它的g++编译器输出结果是:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wyggfy.html