第八章:多态性

主要内容:

1.多态性

2.运算符重载

3.虚函数

4.纯虚函数

5.抽象类



多态实现:

--函数重载

--运算符重载

--虚函数

限制:有些运算符是不可重载的,重载基本是改变操作对象,有基本类型转为user-defined类型。

实现机制:运算表达式==》运算符函数,运算对象==》运算符函数的实参

形式:1.重载为类成员函数,此时 参数个数=原操作数-1(后置++,--除外)

2.重载为友元函数,此时  参数个数 = 原操作数个数,至少有一个用户自定义类型的形参。

声明形式:

函数类型  operator 运算符(形参)

{

.....

}

运算符成员函数的设计:

1.双目运算符B

oprd1 B oprd2

若oprd1 是A类对象 则 oprd1 B oprd2 ==>> oprd1.operator B(oprd2)

2.前置单目运算符U

U oprd

若oprd 为A类对象 ,U 被重载为A类的成员函数 则U oprd ==>> oprd.operator U()

 3.后置单目运算符++、--

oprd++ / oprd--

若oprd为A类对象,++、--被重载为A类的成员函数,且具有一个int类型形参。则 oprd++ ==> oprd.operator++(0)

    为何要这样设计呢???如果不明白,虽然现在看懂了,过后还是忘得?????

  运算符友元函数设计:

   1.双目运算符B

     oprd1 B oprd2 ===> operator B(oprd1,oprd2)

    2.前置单目运算符B

    B oprd ===>operator B(oprd)

    3.后置单目运算符++、--

     oprd B ===>operator B(oprd,0)



静态绑定与动态绑定

1.绑定: 程序自身彼此关联的过程,确定程序中的操作调用与执行该操作的代码间的关系。

2.静态绑定(静态联编)

编译阶段,用对象名或者类名来限定要调用的函数

3.动态绑定

运行阶段,程序运行时确定将要调用的函数

还是不太明白静态编译和动态编译的概念,到底是如何实现动态的编译呢?????



虚函数:

本质:不是重载声明而是覆盖

调用方式:根据指针指向的对象的类,而不是指针本身的类型。



虚析构函数:

虚技术与析构函数的合体,这样可以用基类指针delete派生类得对象。



抽象类

只要含有纯虚函数的类就是抽象类

class 类名

{

virtual 类型 函数名(参数表)=0;/纯虚函数

}

NOTE:

  抽象类只能作为基类来使用

  不能声明抽象类的对象

  构造函数能是虚函数,析构函数可以是虚函数(????)

还有一个疑问:为何构造函数不具有继承特性呢。析构函数呢?析构函数也不具有继承特性。但可以有虚析构函数

时间: 2024-10-24 11:01:40

第八章:多态性的相关文章

第八章 多态性

第八章 多态性 一.多态性的各种概念 多态的定义:同样的消息被不同类型的对象接收时导致不同的行为 多态的类型:重载多态.强制多态.包含多态和参数多态.前两种为专用多态,后两种为通用多态. [强制多态]:将一个变元的类型加以变化,以符合一个函数或者操作的要求.(例如:加法运算符在进行浮点数与整型数相加时,首先进行强制转换,把整型数先变为浮点型数再相加的情况) [多态的实现]:编译时的多态性(在编译过程中确定了同名操作的具体操作对象)和运行时的多态(在程序运行过程中才动态的确定操作所针对的具体对象)

Thinking In Java笔记(第八章 多态)

第八章 多态 在面向对象的程序设计语言中,多态是继抽象和技能之后的第三种基本特征.多态不但能够改善代码的组织结构和可读性,还能够创建可扩展的程序. 多态的作用是用来消除类型之间的耦合关系. 8.1 再论向上转型 将某个对象的引用视为对其基类对象的做法被称作向上转型.但是这样做也有问题.看如下的例子: public enum Note { MIDDLE_C, C_SHARP, B_FlAT; } class Instrument { public void play(Note n) { Syste

《Linux内核设计与实现》读书笔记 第十八章 调试

第十八章调试 18.1 准备开始          需要准备的东西: l  一个bug:大部分bug通常都不是行为可靠而且定义明确的 l  一个藏匿bug的内核版本:找出bug首先出现的版本 l  相关内核代码的知识和运气 最好能让bug重现,有一些bug存在而且有人没办法让他重现,因为内核与用户程序和硬件间的交互很微妙. 18.2内核中的bug 可以有无数种原因产生,表象也变化多端.代码中的错误往往引发一系列连锁反应,目击者才看到bug. 18.3通过打印来调试 内核提供了打印函数printk

Java 多态性理解

什么是多态 面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 多态的定义:指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而采用多种不同的行为方式.(发送消息就是函数调用) 实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法.特别注意:当所引用的类型存在继承关系时候,会结合参数的类型,选择相应的方法.可以结合

第八章、Linux 磁盘与文件系统管理

第八章.Linux 磁盘与文件系统管理 1. 认识 EXT2 文件系统 1.1 硬盘组成与分割的复习 1.2 文件系统特性: 索引式文件系统 1.3 Linux 的 EXT2 文件系统(inode): data block, inode table, superblock, dumpe2fs 1.4 与目录树的关系 1.5 EXT2/EXT3 文件的存取与日志式文件系统的功能 1.6 Linux 文件系统的运行 1.7 挂载点的意义 (mount point) 1.8 其他 Linux 支持的文

java 多态性详解及常见面试题

java多态性 多态分两种: (1)   编译时多态(设计时多态):方法重载. (2)   运行时多态:JAVA运行时系统根据调用该方法的实例的类型来决定选择调用哪个方法则被称为运行时多态.(我们平时说得多的事运行时多态,所以多态主要也是指运行时多态) 运行时多态存在的三个必要条件: 一.要有继承(包括接口的实现): 二.要有重写: 三.父类引用指向子类对象. 多态的好处: 1.可替换性(substitutability).多态对已存在代码具有可替换性.例如,多态对圆Circle类工作,对其他任

Java 第八章 类的方法(一) 笔记

Java 第八章 类的方法(一) 一.类的方法语法: 访问修饰符 返回值类型 方法名(){             方法体:      } 二.方法名的规范:     1.必须以字母."_"或"$"开头     2.可以有数字,但不能以数字开头.     3.如果方法名是多个单词组成 ,第一个单词的首字母小写,      其后单词首字母单词大写.     4.方法名都采用动词. 三.方法的返回值     1.有返回值:必须告知返回值的数据类型,并且返回相应的值. 

ROS机器人程序设计(原书第2版)补充资料 (捌) 第八章 导航功能包集入门 navigation

ROS机器人程序设计(原书第2版)补充资料 (捌) 第八章 导航功能包集入门 navigation 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中使用. 本章三个非常重要概念:TF,SLAM,AMCL.务必掌握. 补充内容:http://blog.csdn.net/zhangrelay/article/details/50299417 第216页: 简介本章要点. 第217页: 导航综合功能包组成架构等. 补充如下: 目录 配置并使用导航功能

五到八章心得

第五章 本章主要学习关于开发板的测试环境,由于我们所开发的Linux驱动,不管使用何种方法编译后,都需要在开发板上进行测试,这是因为在ARM架构的开发板可以在X86架构的PC在CPU指令及二进制格式上有所不同 ,而且在Linux所需要的硬件在PC上很难进行模拟,因此要在开发板上进行调试和测试. 本章主要介绍了S3C6410开发板,这是一款低功耗.高性价比的RISC,可广泛应用于移动电话和通用处理等领域. 安装串口调试工具minicom的步骤:1.检测当前系统是否支持usb转串口:2.安装mini