多态

同一函数调用形式(调用形式形同)可以实现不同的操作(执行路径不同),就叫多态。

两种多态:

(1)静态多态:分为函数重载和运算符重载,编译时系统就能决定调用哪个函数。

(2)动态多态(简称多态):运行时系统根据基类指针或引用的指向,才能知道调用哪个对象里的虚函数实现。

   动态多态是通过虚函数实现的,针对的也是虚函数。

  实现了从是谁调用谁指向谁调用谁的重大转变。

这是析构函数声明为虚函数的原因,可以防止delete基类指针时,只调用基类析构函数造成的内存泄露。

虚函数

虚函数的作用:在基类中声明虚函数后,可以在派生类中重新定义与基类声明完全相同的函数(非虚函数也可以-同名覆盖),

进而可以通过基类指针或引用来基类或派生类中的同名函数(非虚函数不可以-调用基类函数需加::符),从而实现多态。

虚函数的特点:

当一个成员函数被声明为虚函数后,其派生类中的同名函数都自动成为虚函数。

派生类重新声明该虚函数时,可以省略virtual,但习惯上都加。

声明虚函数的限制:

(1)static成员函数不能是虚函数,因为静态成员函数不受限于某个对象,没有多态性的特征。

(2)inline成员函数不能声明为虚函数。因为内联函数的执行代码明确的,没有多态性的特征。

(3)构造函数不能是虚函数。因为构造函数在对象创建时调用,完成对象的初始化,此时对象还没有完全建立,更谈不上函数与类对象的绑定。

虚函数表:

------

纯虚函数

纯虚函数的声明:virtual 函数类型 函数名(参数列表)=0;

基类声明纯虚函数的原因:纯虚函数与虚函数不同的时,声明为纯虚函数的虚函数在基类中不使用,只是保留一个接口,具体功能交给派生类去定义。

例如:点->圆->圆柱三个派系类中的求面积函数,对于基类点就是不会被使用的。

抽象类

两种抽象类:

(1)凡是包含纯虚函数的类都是抽象类。

(2)没有所有纯虚函数定义派生类也是抽象类。

抽象类的特点:

不能定义对象(因为纯虚函数不能被调用),但可以定义指针。

抽象类的作用:

常用作基类,为一个类族提供公共接口。

 

C++多态、虚函数、纯虚函数、抽象类的更多相关文章

  1. 虚函数&纯虚函数&抽象类&虚继承

    C++ 虚函数&纯虚函数&抽象类&接口&虚基类   1. 多态 在面向对象语言中,接口的多种不同实现方式即为多态.多态是指,用父类的指针指向子类的实例(对象),然后通过 ...

  2. 【转】C++ 虚函数&纯虚函数&抽象类&接口&虚基类

    1. 动态多态 在面向对象语言中,接口的多种不同实现方式即为多态.多态是指,用父类的指针指向子类的实例(对象),然后通过父类的指针调用实际子类的成员函数. 多态性就是允许将子类类型的指针赋值给父类类型 ...

  3. C++ 虚函数&纯虚函数&抽象类&接口&虚基类(转)

    http://www.cnblogs.com/fly1988happy/archive/2012/09/25/2701237.html 1. 多态 在面向对象语言中,接口的多种不同实现方式即为多态.多 ...

  4. C++基础 (7) 第七天 多态的原理 纯虚函数和抽象类 依赖倒置原则

    1 昨日回顾 2 多态的原理 1 要有继承 2 要有子类重写父类的虚函数 3 父类指针(或者引用)指向子类对象 (动态联编 虚函数表 3 证明vptr指针的存在 4 vptr指针在构造父类的时候是分步 ...

  5. C++多态、虚函数、纯虚函数、抽象类、虚基类

    一.C++多态 C++的多态包括静态多态和动态多态.静态多态包括函数重载和泛型编程,动态多态包括虚函数.静态多态是指在编译期间就可以确定,动态多态是指在程序运行时才能确定. 二.虚函数 1.虚函数为类 ...

  6. C++学习基础十二——纯虚函数与抽象类

    一.C++中纯虚函数与抽象类: 1.含有一个或多个纯虚函数的类成为抽象类,注意此处是纯虚函数,而不是虚函数. 2.如果一个子类继承抽象类,则必须实现父类中的纯虚函数,否则该类也为抽象类. 3.如果一个 ...

  7. C++学习笔记(十二):类继承、虚函数、纯虚函数、抽象类和嵌套类

    类继承 在C++类继承中,一个派生类可以从一个基类派生,也可以从多个基类派生. 从一个基类派生的继承称为单继承:从多个基类派生的继承称为多继承. //单继承的定义 class B:public A { ...

  8. c++ 虚函数多态、纯虚函数、虚函数表指针、虚基类表指针详解

    静态多态.动态多态 静态多态:程序在编译阶段就可以确定调用哪个函数.这种情况叫做静态多态.比如重载,编译器根据传递给函数的参数和函数名决定具体要使用哪一个函数.动态多态:在运行期间才可以确定最终调用的 ...

  9. c++,纯虚函数与抽象类

    1.纯虚函数的定义: (1)虚函数被“初始化”为0的函数.声明纯虚函数的一般形式是virtual 函数类型 函数名(参数表列) =0;(2)纯虚函数没有函数体:(3)最后面的“=0”并不表示函数返回值 ...

随机推荐

  1. SpringMVC是单例的,高并发情况下,如何保证性能的?

    首先在大家的思考中,肯定有影响的,你想想,单例顾名思义:一个个排队过...  高访问量的时候,你能想象服务器的压力了... 而且用户体验也不怎么好,等待太久~ 实质上这种理解是错误的,Java里有个A ...

  2. django_forms组件用ajax发送数据验证注册

    forms组件 -forms是什么? 就是一个类,可以校验字段(前台传过来的字段) -怎么用: -校验字段功能: -先写一个类,继承Form from django.shortcuts import ...

  3. 我的Android进阶之旅------>Android Activity的singleTask加载模式和onActivityResult方法之间的冲突

    今天调试一个bug的时候,情景如下: 一个Activity A,需要用startActivityForResult方法开启Activity B.Activity B的launch mode被设置为si ...

  4. 通信—HTTP与HTTPS

    HTTP是客户端浏览器或其他程序与Web服务器之间的应用层通信协议.在Internet上的Web服务器上存放的都是超文本信息,客户机需要通过HTTP协议传输所要访问的超文本信息. HTTPS(全称:H ...

  5. go——接口(二)

    多态是指代码可以根据类型的具体实现采取不同行为的能力. 如果一个类型实现了某个接口,所有使用这个接口的地方,都可以支持这种类型的值. 标准库里有很好的例子,如io包里实现的流式处理接口. io包提供了 ...

  6. python 测试代码

    1.使用print()打印 测试代码最简单的就是添加一些print()语句.然而产品开发中,需要记住自己添加的所有print()语句并在最后删除,很容易出现失误. 2.使用pylint.pyflake ...

  7. xpath(待补充)

    from lxml import etree html=""" <div> <ul> <li>1</li> <li ...

  8. $用python-docx模块读写word文档

    工作中会遇到需要读取一个有几百页的word文档并从中整理出一些信息的需求,比如产品的API文档一般是word格式的.几百页的文档,如果手工一个个去处理,几乎是不可能的事情.这时就要找一个库写脚本去实现 ...

  9. linux命令详解之(at)

    在Linux下,有两个命令可以用来作为计划任务而执行,at:一次性定时任务计划执行crontab :每天定时任务计划执行 以下仅说一下一次性任务计划执行(at)要使用一次性任务计划,linux必须要有 ...

  10. gh-ost测试

    gh-ost测试 1.不支持没有主键或者唯一索引的表 2018-08-24 09:53:33 FATAL No PRIMARY nor UNIQUE key found in table! Baili ...