C++多态等知识点
分清虚函数和纯虚函数的区别:
(1).虚函数是函数前加关键字virtual,一般定义格式为:
virtual 类型 函数名 (参数表)
{
函数体
}
(2).纯虚函数的生命格式为:
virtual 类型 函数名 (参数表)=0;
即没有函数体。
(3).带有纯虚函数的类为抽象类:
例:
class 类名
{
virtual 类型 函数名(参数表)=0;
} 为抽象类。
关于抽象类:
(1).抽象类不能定义对象。
(2).抽象类只能作为基类来使用。
(3).构造函数不能是纯虚函数,析构函数可以是纯虚函数。
关于虚函数:
(1).只有类的成员函数才能说明为虚函数,因为虚函数仅适用于
继承关系的类对象,所以普通不能说明为虚函数。
(2).内联函数不能是虚函数,因为内联函数是在编译时决定其位置。
(3).构造函数不能是虚函数,因为构造时对象还是一片未定型的空间。
(4).析构函数可以是虚函数,而且通常声明为虚函 数。
总结:
(1).当在基类中把成员函数定义为虚函数后,在其派生类中定义的虚函数
必须与基类中的虚函数同名,参数的类型、顺序、个数必须一一对应。
(2).实现这种动态的多态性,必须使用基类类型的指针变量或引用,使该
指针指向不同的派生类的对象,并通过调用指针所指的虚函数才能实现动态的多态性。
实现多态的基本步骤:
(1).在基类中,定义成员函数为虚函数(virtual);
(2).定义基类的公有(public)派生类。
(3).在基类的公有派生中“重载”该虚函数。
(4).定义指向基类的指针变量,它指向基类的公有派生类的对象。
注意:重载虚函数不是一般的重载函数,它要求函数名、返回类型、参数个数
参数类型和顺序完全相同。
C++多态等知识点的更多相关文章
- java 多态 (知识点不完整)
1.多态的条件 1.要有继承 2.方法重写 3.父类引用指向子类对象 多态中成员访问 1. 访问成员变量: 编译看左边,运行也看左边 f.num = 10 因为这里是父类的,看是父类Father ...
- day25 面向对象继承,多态,
这两天所学的都是面向对象,后面还有几天也是它,面向对象主要有三个大的模块,封装,继承,多态,(组合),昨天主要讲了面向对象的命名空间,还有组合的用法,今天是讲的继承还有继承里面所包括的钻石继承,以及多 ...
- c# 第35节 类的多态
本节内容: 1:多态前戏 2:解决多态的知识点 3:多态两个实例 1:多态前戏 多态源自生活中的现象: 阿拉甲,阿拉乙,阿拉丙,阿拉丁,是人这个类产生的四个对象: 他们的父亲说:世界上女的都是女老虎, ...
- 面向对象的继承和多态(is-a)
继承的主要作用:我们使用继承主要是为了避免出现重复的定义,程序中如果出现多个地方有相同的定义,可以把相同程序提取出来定义为父类. 子类继承父类使用extends关键字,子类具备父类所有的属性和方法,包 ...
- C++练习案例1.计算机类(利用多态实现)
c++简单计算机类 简介 大家好,这里是天天like的博客,这是我发的第一篇随笔,用来记录我的学习日程,大家可以相互学习,多多交流,感谢 今天我要记录的随笔是在学习c++多态的知识点练习改进的一个案例 ...
- java中的继承 和多态。
package com.aaa.zxf.ajax.test; /** *一. java 中的继承和多态. * * 继承的特性? * 1.实现继承的方式 * A 如何建立继承关系(一个类继承于 另一个类 ...
- 201521123101 《Java程序设计》第6周学习总结
1. 本周学习总结 1.面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 2. 书面作业 1.clone方法 1.1 Object对象中 ...
- 201521123070 《JAVA程序设计》第4周学习总结
1. 本章学习总结 1.1 尝试使用思维导图总结有关继承的知识点. http://naotu.baidu.com/file/4de6f42e4f4f6cce0531dd9997b04e60?token ...
- 201521123101 《Java程序设计》第4周学习总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 理解类的继承的概念,明白父与子之间关系的 2. 书面作业 1.注释的应用,使用类的注释与方法 ...
随机推荐
- SpringBoot 2.x 集成QQ邮箱、网易系邮箱、Gmail邮箱发送邮件
在Spring中提供了非常好用的 JavaMailSender接口实现邮件发送,在SpringBoot的Starter模块中也为此提供了自动化配置. 项目源码已托管在Gitee-SpringBoot_ ...
- gdb fabs错误输出
https://sourceware.org/gdb/wiki/FAQ GDB doesn't know the return type nor the type of the arguments f ...
- PHP 实现自动加载
自动载入主要是省去了一个个类去 include 的繁琐,在 new 时动态的去检查并 include 相应的 class 文件. 先上代码: //index.php <?php class Cl ...
- 【Android自己定义控件】圆圈交替,仿progress效果
还是我们自定View的那几个步骤: 1.自己定义View的属性 2.在View的构造方法中获得我们自己定义的属性 3.重写onMesure (不是必须) 4.重写onDraw 自己定义View的属性 ...
- java生成32的md5签名串
import java.security.MessageDigest; import lombok.extern.slf4j.Slf4j; /** * 签名帮助类 * * @author yangzl ...
- 优麒麟 16.04 LTS(长期支持)版本
Ubuntu Kylin (中文又被称为优麒麟)是基于Ubuntu的一款官方衍生版. 它是一款专门为中国市场打造的免费操作系统.它包括Ubuntu用户期待的各种功能,并配有必备的中文软件及程序. ht ...
- iostat各字段的来源和真实含义
The primary tool for inspecting Linux disk performance is iostat. The output includes many important ...
- Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -
mysql -A不预读数据库信息(use dbname 更快)—Reading table information for completion of table and column names Y ...
- seaJS简介和完整实例
什么是 seaJS ? 和requireJS相似的,seaJS 也是用JavaScript编写的JS框架,主要功能是可以按不同的先后依赖关系对 JavaScript 等文件的进行加载工作,可简单理解为 ...
- C#字符串、字节数组和内存流间的相互转换
定义string变量为str,内存流变量为ms,比特数组为bt 1.字符串=>比特数组 (1)byte[] bt=System.Text.Encoding.Default.GetBytes(&q ...