抽象类,override,final和类模板
抽象类:
**有些函数由于信息不够具体,而无法实现**
由此而来的纯虚函数:在基类中声明的纯虚函数,在基类中无法实现(是因为在基类中定义的信息不够具体,不是学的知识不够),于是这个函数没办法规定具体的算法,但是为了规定整个类家族的统一的行为和对外接口,又需要再比较高层次的基类中定义这么一个函数。
在函数头之后接一个=0,表示没有函数体
只要是带有纯虚函数的类都叫抽象类,因为这样的类它还没有些东西没有实现,所有不能产生实例,抽象类不能定义对象。
通过基类指针可以接收不同派生类对象的地址,然后去调用在基类中定义过的这个函数名,就是配合着虚函数这种动态绑定机制去利用多态性的一种很好的方式。
若派生类不能实现那些在基类中没有实现的纯虚函数,派生类仍然继续作为抽象类,还是没办法实例化,定义对象。
抽象类是用来作为基类使用的,不能定义对象,其作用是用来规定整个类家族的统一对外接口和必须具有的功能。
override:
多态行为的基础:基类声明一个虚函数派生类声明一个函数覆盖该虚函数,要求:函数原型完全一样
override就是用来防止开发者在使用多态时,在派生类中需要覆盖的函数与原型不同或漏写参数,在函数前加上override,编译器就会自动去基类中查找相同原型的函数,找不到则报错
final
继承意味着一定要对它进行修改,不修改的话直接使用即可,与现实世界中的继承不同。
当不希望功能被修改时,需要使用final,它并不是关键字,但可以当关键字理解。
在类名后加final,表明该类不允许被继承。
在函数名后加final,表明函数不允许被覆盖,即不允许被重写
编译器会生成适合这种数据类型的数据容器以及算法函数
函数模板:针对算法逻辑相同,参数不同
针对多个几乎一样的函数体
函数模板不可以直接被调用,是编译器依据函数模板去生成一个函数
类模板:
template <模板参数类>
class 类名
{类成员声明}
在类模板以外定义成员函数,都要带上template<模板参数表>,其他部分相同
抽象类,override,final和类模板的更多相关文章
- 抽象类、final关键字、多态
1.1 抽象类 1.1.1 抽象类概念 C extends B,B extends A,在继承过程中,形成一个继承金字塔,位于金字塔底部的类越来越具体(强大),位于塔顶的越来越抽象(简单). 例如:人 ...
- 抽象类和final
抽象类: 概念:在继承过程中,形成一个继承金字塔,位于金字塔底部的类越来越具体(强大),位于塔顶的越来越抽象(简单). 关键字 :abstract 抽象类特性: [1]抽象类过于抽象,实例化后无语义 ...
- 第10课 面向对象的增强(default/delete、override/final)
一.default和delete关键字 (一)编译器提供的“缺省函数” 1.类的成员函数:构造/析构函数.复制构造/复制赋值函数.移动构造/移动赋值函数. 2. 类的全局默认操作函数:operator ...
- Java入门教程十(抽象类接口内部类匿名类)
抽象类(abstract) 一个类只定义了一个为所有子类共享的一般形式,至于细节则交给每一个子类去实现,这种类没有任何具体的实例,只具有一些抽象的概念,那么这样的类称为抽象类. 在面向对象领域,抽象类 ...
- java自学第3期——继承、多态、接口、抽象类、final关键字、权限修饰符、内部类
一.继承: 关键字extends /* 定义一个父类:人类 定义父类格式:public class 父类名称{ } 定义子类格式:public class 子类名称 extends 父类名称{ } * ...
- c++ 11 override final
C++ 11添加了两个继承控制关键字:override和final. override确保在派生类中声明的重载函数跟基类的虚函数有相同的签名.final阻止类的进一步派生和虚函数的进一步重载
- Java 抽象类和Final关键字
抽象类 用abstract关键字来修饰一个类时,这个类叫抽象类: 用abstract关键字来修饰一个方法时,该方法叫做抽象方法. 含有抽象方法的类必须被定义而为抽象类,抽象类必须被继承,抽象方法必须被 ...
- 【转】C++ 虚函数&纯虚函数&抽象类&接口&虚基类
1. 动态多态 在面向对象语言中,接口的多种不同实现方式即为多态.多态是指,用父类的指针指向子类的实例(对象),然后通过父类的指针调用实际子类的成员函数. 多态性就是允许将子类类型的指针赋值给父类类型 ...
- C++ 虚函数&纯虚函数&抽象类&接口&虚基类(转)
http://www.cnblogs.com/fly1988happy/archive/2012/09/25/2701237.html 1. 多态 在面向对象语言中,接口的多种不同实现方式即为多态.多 ...
随机推荐
- js实现刷新页面出现随机背景图
直接上代码: <script> var bodyBgs = []; bodyBgs[0] = "IMG/01.jpg"; ...
- MVC 2nd
步骤 3 创建控制器. StudentController.java public class StudentController { private Student model; private S ...
- tensorflow 训练cifar10报错
1.AttributeError: 'module' object has noattribute 'random_crop' 解决方案: 将distorted_image= tf.image.ran ...
- 本地Navicat连不上Linux虚拟机MySQL数据库问题
LinuxAndMySQL 版权声明:本文为博主原创文章,未经博主允许不得转载. 在Linux登录到MySQL数据:mysql -uroot -p 输入密码 切换到mysql数据库 mysql> ...
- 23种经典设计模式UML类图汇总
在这里23种经典设计模式UML类图汇总 创建型模式 1.FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基 ...
- MyBatis 3 使用注解配置SQL映射器
l 在映射器Mapper接口上使用注解 l 映射语句 @Insert,@Update,@Delete,@SeelctStatements l 结果映射 一对一映射 一对多映射 l 动态SQL @Sel ...
- 修改.net反编译的dll
用.Net reflector 打开,配合reflexil工具. 有两种修改方法. 1.重写,试过,但不好用. 2.修改IL指令 一般只需修改简单的if判断. 方法:找到需要修改的行,把brfalse ...
- 数据库表字段,DEFAULT NULL与NOT NULL DEFAULT
为什么要把字段设置成not null 呢? 1.空值是不占用空间的 2.mysql中的NULL其实是占用空间的,下面是来自于MYSQL官方的解释 “NULL columns require addit ...
- 164. Maximum Gap (Array; sort)
Given an unsorted array, find the maximum difference between the successive elements in its sorted f ...
- TZOJ 1937 Hie with the Pie(floyd+状压dp)
描述 The Pizazz Pizzeria prides itself in delivering pizzas to its customers as fast as possible. Unfo ...