从C到C++(下)
继承
从一个类派生到另外一个类,使前者的所有特征在后者中自己主动可用。
他能够声明一些类型,这些类型能够共享部分或所有曾经所声明的类型。它也能够从超过一个的基类中共享一些特性。
C++是支持多继承的。
类的继承修饰符后:
使用private继承,父类的全部方法在子类中变为private;
使用protected继承,父类的protected和public方法在子类中变为protected,private方法不变;
使用public继承,父类中的方法属性不发生改变;
| public: | protected: | private: | |
| public继承 | public | protected | --- |
| protected继承 | protected | protected | --- |
| private继承 | private | private | --- |
class Fruit{
public:
peel();
slice();
juice();
private:
int weight;
int height;
};
class Apple : public Fruit
{
public:
void make_candy_apple(float weight);
void bob_fro(int tub_id, int num_of_attempts);
}
不要把一个类内部嵌套还有一个类与继承相混淆。
类的嵌套并不具有特殊的权限。跟被嵌套的类也没有什么特殊的关系。
嵌套通常被用于实现容器类(实现一些数据结构的类,如链表、队列等)。
C++添加了模板(template)被用于实现容器类。
继承表示一个对象是一个更为普通的父对象的特型。
—————————————————————————————————————————————————————————————————————————————
多重继承
多重继承同意把两个类组合成一个。这样结果类对象的行为类似于这两个类的对象中的不论什么一个。
它把树形类体系变成格形。
—————————————————————————————————————————————————————————————————————————————
多态——执行时绑定
多态,支持相关的对象具有不同的成员函数(但原型同样),同意对象与适当的成员函数进行执行时绑定。C++通过覆盖支持这样的机制——全部的多态成员函数具有同样的名字,由执行时系统推断哪一个最为合适。
当使用继承时就要用到这样的机制:有时你无法在编译时分辨所拥有的对象究竟是基类对象还是派生类对象。这个推断并调用正确的函数的过程就被称为“后期绑定”。在成员函数加virtualkeyword告诉编译器该成员函数是多态的。
在平常的编译时重载中,函数的原型必须显著不同。这样编译器才干通过查看擦输的类型来推断须要调用那个函数;但在虚拟函数中。函数的原型必须同样,有执行时系统进行解析调用哪一个函数。这样的过程叫覆盖。
重载是发生在同一类的不同函数间。覆盖是发生在多个类继承中。
多态就是指一个函数函数或操作符仅仅有一个名字,但它能够用于几个不同的派生类型的能力。
每一个对象都实现该操作的一种变型,表现一种最适合自身的行为。它始于覆盖一个名字,对同一名字进行复用,使它能够表现出不同的行为。
—————————————————————————————————————————————————————————————————————————————
C++纯虚函数
一、定义
纯虚函数是在基类中声明的虚函数。它在基类中未定义,但要求不论什么派生类都要定义自己的实现方法。在基类中实现纯虚函数的方法是在函数原型后加“=0”
virtual void funtion()=0
二、引入原因
1、为了方便使用多态特性。我们经常须要在基类中定义虚拟函数。
2、在非常多情况下,基类本身生成对象是不合情理的。比如,动物作为一个基类能够派生出老虎、孔雀等子类。但动物本身生成对象明显不合常理。
为了解决上述问题,引入了纯虚函数的概念,将函数定义为纯虚函数(方法:virtual ReturnType Function()= 0;)。则编译器要求在派生类中必须予以重写以实现多态性。
同一时候含有纯虚拟函数的类称为抽象类。它不能生成对象。这样就非常好地攻克了上述两个问题
从C到C++(下)的更多相关文章
- C++程序结构---1
C++ 基础教程Beta 版 原作:Juan Soulié 翻译:Jing Xu (aqua) 英文原版 本教程根据Juan Soulie的英文版C++教程翻译并改编. 本版为最新校对版,尚未定稿.如 ...
- Android SwipeRefreshLayout 下拉刷新——Hi_博客 Android App 开发笔记
以前写下拉刷新 感觉好费劲,要判断ListView是否滚到顶部,还要加载头布局,还要控制 头布局的状态,等等一大堆.感觉麻烦死了.今天学习了SwipeRefreshLayout 的用法,来分享一下,有 ...
- IE6、7下html标签间存在空白符,导致渲染后占用多余空白位置的原因及解决方法
直接上图:原因:该div包含的内容是靠后台进行print操作,输出的.如果没有输出任何内容,浏览器会默认给该空白区域添加空白符.在IE6.7下,浏览器解析渲染时,会认为空白符也是占位置的,默认其具有字 ...
- Ubuntu下使用nvm
写在前面:刚写着写着博客就跨年了,希望新的一年大家万事如意,一切向"前"看! 安装 wget -qO- https://raw.githubusercontent.com/crea ...
- Cmder--Windows下命令行利器
cmder cmder是一个增强型命令行工具,不仅可以使用windows下的所有命令,更爽的是可以使用linux的命令,shell命令. 安装包 安装包链接 下载后,直接解压即用. 修改命令提示符λ为 ...
- NodeJs在Linux下使用的各种问题
环境:ubuntu16.04 ubuntu中安装NodeJs 通过apt-get命令安装后发现只能使用nodejs,而没有node命令 如果想避免这种情况请看下面连接的这种安装方式: 拓展见:Linu ...
- GreenDao 数据库:使用Raw文件夹下的数据库文件以及数据库升级
一.使用Raw文件夹下的数据库文件 在使用GreenDao框架时,数据库和数据表都是根据生成的框架代码来自动创建的,从生成的DaoMaster中的OpenHelper类可以看出: public sta ...
- [APUE]UNIX进程的环境(下)
一.共享库 共享库使得可执行文件中不再需要包含常用的库函数,而只需在所有进程都可存取的存储区中保存这种库例程的一个副本.程序第一次执行的时候或第一次调用某个库函数的时候,用动态链接方法将程序与共享库函 ...
- ASP.NET Aries 入门开发教程4:查询区的下拉配置
背景: 今天去深圳溜达了一天,刚回来,看到首页都是微软大法好,看来离.NET的春天就差3个月了~~ 回到正题,这篇的教程讲解下拉配置. 查询区的下拉配置: 1:查询框怎么配置成下拉? 在配置表头:格式 ...
- tLinux 2.2下安装Mono 4.8
Tlinux2.2发行版基于CentOS 7.2.1511研发而成,内核版本与Tlinux2.0发行版保持完全一致,更加稳定,并保持对Tlinux2.0的完全兼容.Mono 4版本要求CentOS 7 ...
随机推荐
- ES Segment Memory——本质上就是segment中加到内存的FST数据,因此segment越多,该内存越大
ElasticSearch优化系列四:ES的heap是如何被瓜分掉的 转自:https://www.jianshu.com/p/f41b706db6c7 以下分别解读几个我知道的内存消耗大户: Seg ...
- (hdoj 5137 floyd)How Many Maos Does the Guanxi Worth
How Many Maos Does the Guanxi Worth Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 512000/5 ...
- python笔记:字符编码
ASCII编码 知识点:计算机中最小的单位是bit,bit就咱们常说一位二进制,一位二进制要么是0 要么是 1.但是bit这个单位太小了,我们用字节(byte)来表示.换算的规则如下: 8b = 1B ...
- 如何用ajax写分页查询(以留言信息为例)-----2017-05-17
要写分页,首先你得清楚,一页你想显示多少条信息?如何计算总共显示的页数? 先说一下思路: (1)从数据库读取数据,以chenai表为例,读取所有留言信息.并能够实现输入发送者,可以查询该发送者的留言总 ...
- Python中断言与异常的区别
异常,在程序运行时出现非正常情况时会被抛出,比如常见的名称错误.键错误等. 异常: >>> s Traceback (most recent call last): File &qu ...
- DB2大数据量优化查询解决方案
利用DB2表分区的功能对大数据量的表进行分区,可以优化查询. 表分区介绍: 表分区是一种数据组织方案,它根据一列或多列中的值把表数据划分为多个称为数据分区 的存储对象. (我觉得表分区就类似于Wind ...
- ubuntu16 mysql 远程连接
打开配置文件: sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf 将下面一行注释掉: # bind-address = localhost 重启服务 sudo s ...
- java线程入门知识
为什么需要多线程? . 模型的简化,如某些程序是由多个相对独立任务的运行: . 图形界面的出现,输入.输出的阻塞 . 多核CPU的更好利用 . 异步行为的需要 Java多线程的特性: . 程序的入口m ...
- 应运而生! 双11当天处理数据5PB—HiStore助力打造全球最大列存储数据库
阿里巴巴电商业务中历史数据存储与查询相关业务, 大量采用基于列存储技术的HiStore数据库,双11当天HiStore引擎处理数据记录超过6万亿条.原始存储数据量超过5PB.从单日数据处理量上看,该系 ...
- js页面传值,cookie
// 获取页面穿值 function GetQueryString(name) { var reg = new RegExp("(^|&)" + name + " ...