C++中的多态性
来源:互联网 发布:华师大网络教育报名 编辑:程序博客网 时间:2024/05/16 12:20
多态性:即基类指针指向派生类对象,当调用相应基类的方法,执行的却是派生类对象的方法(派生类中复写了基类当中相应调用的方法)。程序中的这种形式,我们叫做多态。但在C++中实现多态时,有一个关键字必不可少。如果没有这个关键字,则想通过基类指针调用派生类的方法时,却只能调用基类本身的方法,并没有产生多态的行为。也就是说只调用了句柄(基类指针或引用所指的对象)的方法,而没有调用句柄所指向的派生类的方法。那么如何才能在C++程序中产生多态呢,我们可以在想产生多态行为的函数前加上关键字visual。这样就可以改变方式,而不再根据句柄的类型决定调用的方法。而是根据句柄所指派生类对象的类型而决定(此时就是多态行为)。只有加上visual的函数才有资格形成多态,否则编译器报错。对于visual的函数我们称为虚函数。派生类可以复写基类中的visual函数,也可以不复写。这取决于相应的应用场合。对于虚函数中,我们还有一种更加特殊的函数,就是纯虚函数了,什么是纯虚函数?就是把已经是visual的函数后面加上等于0的形式。例 visual void print() = 0; //此函数就是纯虚函数了。纯虚函数的特点就是派生类一定要复写此函数,否则无法实例化对象。原因在于具有这样纯虚函数的类是不完整的类(纯虚函数没有相应的函数定义),这样的类我们也称为抽象类(只要具备一个纯虚函数就是抽象类)。不具有实例化对象的能力。只有派生类复写了纯虚函数,此派生类才能实例化相应的对象。这就是纯虚函数与虚函数的唯一区别所有!总结起来就是纯虚函数一定要复写,而虚函数可以复写,也可以沿用基类当中的实现。
visual关键字的特点:只有基类中声明相应的函数为visual函数,即派生类就会继承此visual关键字,即使我们复写相应的函数时并没有指明visual性质,但这种性质依然存在。为了使程序更加清晰可读,我们最好还是在类的各层级当中把他们显示的声明为visual函数。当派生类选择不重写从基类继承而来的visual函数时,派生类就会简单的继承基类当中visual函数的实现。
多态性易错点总结:
1.将基类指针指向派生类对象,而想通过基类指针调用派生类当中才有的函数时,编译器报错。即使是有多态,基类中还是要有与派生类一致的函数才能产生相应的多态行为。
2.把基类对象当成派生类对象会导制错误。原因在于派生类"是一个"基类对象,但基类"不是一个"派生类
转自我的个人技术网站
- c/c++中的多态性
- C++:多态性
- C++-多态性
- C++---多态性
- C+++多态性
- 【C#】多态性
- C++---------【多态性】之【静态多态性】
- (原创)深入剖析:C++“多态性”在编译器中的实现
- 【iOS沉思录】Objective-C中的多态性分析
- C# 中的多态性
- 面向对象中的多态性
- c#中的多态性
- C#中的多态性
- 关于C++中的多态性
- C#中的多态性
- C#中的多态性[转]
- C#中的多态性
- C#中的多态性
- 安卓应用程序插件化开发框架 -AAP Framework
- c++builder 6 [Linker Fatal error] Unable to open file 'FILECTRL.OBJ'
- golang与node.js的http对比测试
- GDI+ 绘图时,相同分辨率, DPI不同时图片显示的问题.
- js的会走的层
- C++中的多态性
- 复写treeItemrenderer 给树形菜单加复选框
- 用Eclipse调试Node.js代码
- C++中的异常处理
- Spring+JMS+使用JMS+ActiveMQ中间件+实现简单聊天功能的小例子
- 使用POI导出Excel
- Flex 强制转换类型失败:
- 工业信息化一般架构模式
- C++中运行时类型信息(RTTI)及动态强制类型转换