C++中多态总结
来源:互联网 发布:用php写一个简单的贴吧 编辑:程序博客网 时间:2024/06/08 06:45
一. 多态的概念
同一事物,在不同场景下的多种形态
例如:“*”在不同场景下的形态
int* p=&a;//指针 *p;//解引用 a*b;//乘号
二.多态的分类
1.静态多态:编译器在编译期间完成的,编译器根据函数实参的类型(可能会进行隐式类型转换),可推断出要调用那个函数,如果有对应的函数就调用该函数,否则出现编译错误。
int Add(int a,int b){ return a+b;}float Add(int a,int b) return a+b;}int main(){ cout<<Add(10,20)<<end1; cout<<Add(3.14f,5.6f)<<end1; return 0;}
2.动态多态:在程序执行期间(非编译期)判断所引用对象的实际类型,根据其实际类型调用相应的方法。
class WashRoom{public: void GoToManWashRoom(){ cout << "Man-->Please Left" << endl;} void GoToWomanWashRoom() { cout << "Woman-->Please Right" << endl; }};class Person{public: virtual void GoToWashRoom(CWashRoom & _washRoom) = 0;};class Man :public Person{public: virtual void GoToWashRoom(WashRoom & washRoom){ washRoom.GoToManWashRoom();}};};class Woman :public Person{public: virtual void GoToWashRoom(WashRoom & washRoom) { washRoom.GoToWomanWashRoom(); }};void FunTest(){ WashRoom washRoom; for (int iIdx = 1; iIdx <= 10; ++iIdx) { Person* pPerson; int iPerson = rand() % iIdx; if (iPerson & 0x01) pPerson = new Man; else pPerson = new Woman; pPerson->GoToWashRoom(washRoom); delete pPerson; pPerson = NULL; Sleep(1000); }
三. 动态多态的实现条件
1.基类中必须有虚函数;
class Base{public: virtual void FunTest1(int _iTest){ cout << "Base::FunTest1()" << endl; } void FunTest2(int _iTest){ cout << "Base::FunTest2()" << endl; } virtual void FunTest3(int _iTest1){ cout << "Base::FunTest3()" << endl; } virtual void FunTest4(int _iTest){ cout << "Base::FunTest4()" << endl; }};class Derived :public Base{public: virtual void FunTest1(int _iTest){ cout << "Derived::FunTest1()" << endl; } virtual void FunTest2(int _iTest){ cout << "Derived::FunTest2()" << endl; } void FunTest3(int _iTest1){ cout << "Derived::FunTest3()" << endl; } virtual void FunTest4(int _iTest1, int _iTest2) virtual void FunTest4(int _iTest1, int _iTest2) { cout << "Derived::FunTest4()" << endl; }};int main(){ Base* pBase = new Derived; pBase->FunTest1(0); pBase->FunTest2(0); pBase->FunTest3(0); pBase->FunTest4(0); pBase->FunTest4(0, 0); return 0;}
2.通过基类类型的引用或者指针调用虚函数;
四.多态的实现原理
a、编译时多态性(静态多态):通过重载函数实现
b、运行时多态性(动态多态):通过虚函数实现。
阅读全文
0 0
- C总结
- C 总结
- 【C++】总结
- 【C#】总结
- C---------------------总结
- c总结
- C#--总结
- c 总结
- c总结
- C总结
- C 总结
- 【总结】C语言总结!!!
- 数据类型总结 (C++,C#)
- [C语言]C总结
- 数据类型总结(C++,C#)
- 【C/C++】排序总结
- C/C++/VC随机数总结
- 【C/C++】realloc使用总结
- ubuntu 16.04 LTS
- Angular4 组件生命周期钩子
- Unity Shader 学习笔记(25) 全局雾效
- VMware虚拟机网络模式之桥接模式
- HDU 1711 Number Sequence(KMP)
- C++中多态总结
- CodeForce
- C. Pride (思路题目)
- (6) Hystrix熔断器实战
- 顺序图
- C#调试断点无效
- 探索深入理解java虚拟机之Java内存模型和线程(7)
- 【观察】聚焦本地合作,看InterSystems如何破解新医改难题
- 索引的注意事项和原理分析