美文网首页
c++ 多态

c++ 多态

作者: 杀破魂 | 来源:发表于2020-01-23 17:52 被阅读0次

什么是多态

多态是指具有不同功能的函数可以用同一个函数名,这样就可以用一个函数名调用不同内容的函数

多态分为两类:静态多态和动态多态。

在程序编译 时系统就能决定调用是哪个函数,称为静态多态。静态多态是通过函数的重载实现的。

在程序运行工程中才动态的定操作所针对的对象,称为动态多态。动态多态是通过虚函数实现的。

虚函数

当把基类的某个成员函数声明为虚函数后,允许在其派生类中对改函数重新定义,赋予它新的功能,并且可以通过指向基类的指针指向同一类族中不同类的对象,从而调用其中的同名函数。

由虚函数实现的动态多态是:同一族中的不同类的对象,对同一函数调用作出不同的响应。

虚函数的使用方法是:

  • 在基类用virtual声明成员函数为虚函数。这样就可以在派生类中重新定义此函数,为它赋予新的功能,并方便的被调用。
  • 在派生类中重新定义此函数,要求函数名、函数类型、函数参数个数和类型全部与基类的虚函数相同,并根据派生类的需要重新定义函数体。
  • 定义一个指向基类对象的指针变量,并使他指向同一类中的某一对象
  • 通过该指针变量调用此虚函数,此时调用的就是指针变量指向的对象的同名函数

使用注意:

  • 当一个成员函数被声明为虚函数后,其派生类中的同名函数都自动称为虚函数。因此在派生类重新声明该虚函数时,可以加virtual,也可以不加。
  • 如果在派生类中没有对基类的虚函数重新定义,则派生类简单的继承其直接基类的虚函数。
  • 使用虚函数,系统要有一定的空间开销。当一个类带有虚函数时,编译系统会为该类构造一个虚函数表,它是一个指针数组,存放每个虚函数的入口地址。

虚析构函数

在程序中最好把基类的析构函数声明为虚函数。这将使所有派生类的析构函数自动称为虚函数。这样,如果程序中用delete准备删除一个对象,而delete的操作对象是指向派生类对象的基类指针,则系统会调用相应类的析构函数。

如果将基类的析构函数声明为虚函数,由该基类所派生的所有派生类的析构函数也都自动称为虚函数。

构造函数不能声明为虚函数。这是因为在执行构造方式时,类对象还未完成建立过程。

纯虚函数

纯虚函数是在声明虚函数时被初始化为0的函数:
virtual 函数类型 函数名 (参数列表)=0

纯虚函数只有函数的名字而不具备函数的功能,不能被调用。

纯虚函数的作用是在基类中为派生类保留一个函数的名字,以便派生类根据需要对它进行定义。

如果在一个类中声明了纯虚函数,而在派生类中没有对该函数定义,则该纯虚函数在派生类中仍然为纯虚函数。

抽象类

不用来定义对象而只作为一种基本类型用作继承的类,称为抽象类。由于它作为基类,通常称为抽象基类

凡是包含纯虚函数的类都是抽象类。因为纯虚函数是不能被调用,包含纯虚函数的类是无法建立对象。抽象类的作用是作为一个类的共同基类,或者说,为一个类提供一个公共接口。

相关文章

  • 深刻剖析之c++博客文章

    三大特性 封装、继承、多态 多态 C++ 虚函数表解析C++多态的实现原理 介绍了类的多态(虚函数和动态/迟绑定)...

  • 多态的C++实现

    多态的C++实现 1 多态的原理 什么是多态?多态是面向对象的特性之一,只用父类指针指向子类的对象。 1.1 多态...

  • C++ 的多态(Polymorphism), virtual f

    多态 c++支持两种多态,编译时多态和运行时多态但其实编译时多态根本不是真正的多态,编译时多态就是函数的重载,ov...

  • C++第六篇多态

    C++中的多态性分为编译时多态性和运行时多态性,编译时多态通过函数重载和模板体现,运行多态通过虚函数体现编译、连接...

  • 面试题目收集总结

    C++: 多态: 多态性都有哪些?(静态和动态,然后分别叙述了一下虚函数和函数重载) c语言和c++有什么区别?(...

  • C++的多态

    C++三大特性:封装、继承和多态。其中最好理解的就是封装了,继承作为C++面向对象的特征也不难理解,那么多态,应该...

  • 实现golang语言的多态

    如何实现golang语言的多态? C++里面有多态是其三大特性之一,那么golang里面的多态我们该怎么实现? g...

  • Swift 多态实现探究

    多态 父类指针指向子类对象 Swift 中多态的实现类似于 c++ 中的虚表 OC 多态实现利用的是 Runtim...

  • C++编译期多态和运行期多态

    C++多态有多种实现方式,在面对对象编程时,采用的是运行期多态,也称动态多态。在泛型编程中,多态基于模板的具现化与...

  • c++多态

    什么是多态性? 多态:相同对象收到不同消息或不同对象收到相同消息时产生不同的动作。C++支持两种多态性:编译时多态...

网友评论

      本文标题:c++ 多态

      本文链接:https://www.haomeiwen.com/subject/zyunzctx.html