浅析C++多态
来源:互联网 发布:淘宝网店模板制作教程 编辑:程序博客网 时间:2024/06/01 21:14
一.什么是多态?
C++是一种面向对象的语言,其三种基本特征为:封装,继承和多态。其中,封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。而多态则是为了实现另一个目的——接口重用!本片文章主要解释了三大特性中的多态。
多态是面向对象程序设计的一个重要特征。利用多态性可以设计和实现一个易于扩展的系统。多态就是一个事物有多重状态,在C++程序设计中,多态性是指具有不同功能的函数可以用一个函数名,这样就可以用同一个函数名实现不同的功能。
从对象的类型来看,多态又被分为静态动态和动态多态。
静态多态:编译器在编译期间完成的,编译器根据函数实参的类型(可能会进行隐式类型转换),可推断出要调用的那个函数,如果有相对应的函数就调用该函数,否则出现编译错误。
动态多态:在程序执行期间(非编译期)判断所引用对象的实际类型,根据其实际类型调用相应的方法。因此动态多态又称为运行时多态。
动态多态和虚函数主要研究的是:当一个基类被继承为不同的派生类时, 各派生类可以使用与基类成员相同的成员名,如果在运行时用同一个成员名调用类对象的成员,那么会调用哪一个对象的成员?也就是,通过继承而产生了相关的不同派生类,与基类成员同名的成员在不同的派生类中有不同的含义。即“一个接口,多个方法”。
二.多态的实现
多态成立的三个条件
1 要有继承
2 要有函数重写->虚函数
3 要有父类指针(父类引用)指向子类对象
重载、重写、多态
函数重载
必须在同一个类中进行
子类无法重载父类的函数,父类同名函数将被名称覆盖
重载是在编译期间根据参数类型和个数决定函数调用
函数重写
必须发生于父类与子类之间
并且父类与子类中的函数必须有完全相同的原型
使用virtual声明之后能够产生多态(如果不使用virtual,那叫重定义)
多态是在运行期间根据具体对象的类型决定函数调用
虚函数:
class Base{public:virtual void FunTest1(){cout << "Base::FunTest1" << endl;}};class Drived :public Base{public:virtual void FunTest1(){cout << "Drived::FunTest1" << endl;}};void FunTest(){Base b;Drived d;Base &rd = d;d.FunTest1();b.FunTest1();rd.FunTest1();}int main(){FunTest();system("pause");return 0;}
测试结果:
Drived::FunTest1
Base::FunTest1
Drived::FunTest1
虚函数使用方法:
- c/c++/c# 浅析
- 浅析c、c++,vc++
- C标准库函数浅析
- C++const用法浅析
- C标准库函数浅析
- extern "C" 浅析
- Static浅析(C++/OBC)
- 堆栈浅析(Java&C++)
- C指针浅析
- C/C++ const 浅析
- C语言函数浅析
- C语言编译器浅析
- C语言指针浅析
- v4l2_device.c浅析
- v4l2_common.c浅析
- v4l2_dev.c浅析
- v4l2_device.c浅析
- 浅析C#Image类
- 正则表达式
- list合并
- dp专题 第二十四题 鸣人的分身
- Scrapy shell调试返回403错误
- 【转】android播放音频文件
- 浅析C++多态
- list map中的value获取
- android中音频视频开发
- 【转】Android震动实现代码
- list map中的value获取
- Sina App Engine
- 为什么叫回车?
- 一个简单的ajax请求数据
- ASCII码值转化十六进制,十进制数;十六进制字符值转十进制,ASCII码值;