多态性和虚函数、纯虚函数
2012-03-22 12:59
190 查看
#include <iostream.h> class people { public: void eat() { cout << "people eat" << endl; } void sleep() { cout << "people sleep" << endl; } void breathe() { cout << "people breathe" << endl; } }; class man:public people { public: void breathe() { cout << "man breathe" << endl; } }; void fun(people *pPeople) { pPeople->breathe(); } int main(void) { people *pPeople; man m; pPeople = &m; fun(pPeople); return 0; } 运行程序,输出: people breathe Press any key to continue man对象也是一个people对象,将man对象转换为people对象不需要强制转换。 将man对象m的地址赋给pPeople时,编译器进行了类型转换,编译器认为pPeople保存的是people对象的地址。 用virtual声明的函数叫虚函数。 #include <iostream.h> class people { public: void eat() { cout << "people eat" << endl; } void sleep() { cout << "people sleep" << endl; } virtual void breathe() { cout << "people breathe" << endl; } }; class man:public people { public: void breathe() { cout << "man breathe" << endl; } }; void fun(people *pPeople) { pPeople->breathe(); } int main(void) { people *pPeople; man m; pPeople = &m; fun(pPeople); return 0; } 运行程序,输出: man breathe Press any key to continue 这就是C++中的多态性。当编译器发现people类中的breathe是虚函数,就会采用迟绑定技术。就是在编译的时候并不确定具体调用的函数,而是在运行时,根据对象的类型确定,这就是C++的多态性。 在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时会根据对象的实际类型来调用相应的函数,即对象类型是派生类,就调用派生类的函数;如果对象类型是基类,就调用基类的函数。 纯虚函数是被指明不具体实现的虚成员函数。纯虚函数也可以有函数体。它在派生类中具体定义。具有纯虚函数的类叫抽象类,它不能声明对象。 C++的多态性是由虚函数实现的,而不是纯虚函数。如果子类有对基类虚函数的覆盖定义,无论该覆盖定义前是否有virtual,都是虚函数。
相关文章推荐
- 读书笔记--C++程序设计(第2版)--12多态性与虚函数(虚析构函数,纯虚函数与抽象类)
- C++-虚函数,多态性,纯虚函数,抽象类
- C++重载 虚函数 纯虚函数 多态性
- C++多态性基本概念 包括虚函数和纯虚函数
- 【原创】多态性、动态多态性、静态多态性、虚函数、纯虚函数、抽象类总结
- 多态性,虚函数,纯虚函数,抽象类 .
- 【转】虚函数-虚表-虚指针-多态性-如何实现多态-纯虚函数-抽象类-转
- C++语言--多态性-8.1----多重继承、虚基类、虚函数和纯虚函数
- C++学习之路—多态性与虚函数(二)纯虚函数与抽象类
- 【一天一篇CPP】多态性和虚函数和虚析构函数和纯虚函数和抽象类
- 虚函数与多态性、纯虚函数
- 虚函数和多态性2——抽象基类和纯虚函数
- C++多态性基本概念 包括虚函数和纯虚函数
- C++ 多态性 -- 虚函数、纯虚函数
- C++多态性,虚函数与纯虚函数
- 虚函数,虚析构函数,纯虚函数,多态性,抽象类。
- 虚函数与多态性,纯虚函数
- 静态联编,动态联编,类指针之间的关系,虚函数与多态性,纯虚函数,虚析构函数
- c++基础10:继承和派生 虚函数的作用 多态性概念 纯虚函数和抽象类的概念
- 虚函数、纯虚函数详解