C++中的虚函数与多态性
2009-09-08 20:57
302 查看
场景交代:
基类animal中有“呼吸”动作的处理函数breathe()。基类的breathe()前面加上一个virtual关键字给该函数声明成虚函数
派生类fish继承基类animal同时重写了“呼吸”动作的处理函数breathe()
这就是C++中的多态性。当C++编译器在编译的时候,发现animal类的breathe()函数是虚函数,这个时候C++就会采用迟绑定(late binding)技术。也就是编译时并不确定具体调用的函数,而是在运行时,依据对象的类型(在程序中,我们传递的fish类对象的地址)来确认调用的是哪一个函数,这种能力就叫做C++的多态性。我们没有在breathe()函数前加virtual关键字时,C++编译器在编译时就确定了哪个函数被调用,这叫做早期绑定(early binding)。
C++的多态性是通过迟绑定技术来实现的,关于迟绑定技术,读者可以参看相关的书籍,在这里,我们就不深入讲解了。
C++的多态性用一句话概括就是:在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。如果对象类型是派生类,就调用派生类的函数;如果对象类型是基类,就调用基类的函数。
基类animal中有“呼吸”动作的处理函数breathe()。基类的breathe()前面加上一个virtual关键字给该函数声明成虚函数
派生类fish继承基类animal同时重写了“呼吸”动作的处理函数breathe()
这就是C++中的多态性。当C++编译器在编译的时候,发现animal类的breathe()函数是虚函数,这个时候C++就会采用迟绑定(late binding)技术。也就是编译时并不确定具体调用的函数,而是在运行时,依据对象的类型(在程序中,我们传递的fish类对象的地址)来确认调用的是哪一个函数,这种能力就叫做C++的多态性。我们没有在breathe()函数前加virtual关键字时,C++编译器在编译时就确定了哪个函数被调用,这叫做早期绑定(early binding)。
C++的多态性是通过迟绑定技术来实现的,关于迟绑定技术,读者可以参看相关的书籍,在这里,我们就不深入讲解了。
C++的多态性用一句话概括就是:在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。如果对象类型是派生类,就调用派生类的函数;如果对象类型是基类,就调用基类的函数。
相关文章推荐
- (笔试题)关于C++的虚函数和多态性
- C++基础(十一)多态性与虚函数
- 利用C++模板,代替虚函数,实现类的静态多态性(加入性能测试部分)
- C++多态性与虚函数
- C++之多态性与虚函数
- C++之多态性与虚函数
- 利用C++模板,代替虚函数,实现类的静态多态性(加入性能测试部分)
- [转]C++之多态性与虚函数
- 关于C++的虚函数和多态性
- C++多态性:虚函数的调用原理
- 利用C++模板,代替虚函数,实现类的静态多态性(加入性能测试部分)
- c++中虚函数和多态性的问题
- C++基础之多态性与虚函数
- C++之多态性与虚函数
- c++ 多态性以及虚函数
- 第十八讲:C++多态性与虚函数
- C++多态性:虚函数的调用原理
- C++中的函数多态性应用&虚函数的灵活应用
- C++的重要性质:虚函数和多态性
- 运行时多态性:JAVA的重写和C++中的虚函数