Essential C++ 笔记-1
本文作者为C++初学者,学习之中难免有误,该文章仅为参考
面向对象概述
继承:改变类之间的关系
多态:让基类的pointer或refence得以十分透明的指向基类的某个派生对象
继承
继承发生在对象与对象之间,通常由一个基类所派生出来
假设现有Libmat类和从Libmat中继承出的Book类
现有
void load_check_in(Libmat &mat)
{
// mat 实际上代表由Libmat派生出来的的对象,如Book, Files
mat.check_in();
if (mat.is_late())
mat.access_fine();
if(mat.wating_list())
mat.notify_available();
}
假设程序中并没有Libmat对象,而只有其派生对象那么check_in该如何解释,在程序运行过程中调用的到底是Libmat的check_in还是Book的check_in?,此实程序被决议(resloved)
为解决上述问题引入动态绑定(Dynamic binding)机制,虚拟函数实现动态绑定,通过在成员函数前添加 __virtual__关键字即可构建出一个虚拟函数
class Libmat{
public:
virtual void check_in() const{
cout << "This is a Libmat";
}
}
class Book : public Libmat{
public:
void check_in() const {
cout << "This is a Book";
}
}
将基类中的check_in设置为虚拟函数, 则在派生类中定义的同名函数前可不加 virtual,默认情况下编译器会在静态编译时完成决议,但引入虚拟函数之后,决议将会发生在动态编译时,将根据调用check_in 的对象的具体类型来调用相应的函数。
也可以将这种行为理解为覆盖,在基类中的check_in函数在Book类调用时,被Book类的check_in函数覆盖,如果还想使用Libmat类的check_in函数,可以通过添加Libmat::(class scope修饰符)来指定决议结果。
其中继承过来的成员函数,与派生类的成员函数无需区分,他们的使用并无显著差异
在公开继承(public Inheritance)的情况下,基类的public member同样提供给派生类来使用,基类的protected同样也称为派生类的protected,也提供给派生类使用,但基类的private完全不提供给派生类使用,
private 对象只能够被该对象的成员函数调用,除此之外都不能被调用,直接调用也不可以。
根据一般规则凡基类中定义有一个或多个虚拟函数应该要将其destructor 声明为virtual
初始化派生类时必须初始化基类
Essential C++ 笔记-1的更多相关文章
- EC读书笔记系列之16:条款35、36、37、38、39、40
条款35 考虑virtual函数以外的其他选择 记住: ★virtual函数的替代方案包括NVI手法及Strategy模式的多种形式.NVI手法自身是一个特殊形式的Template Method模式 ...
- Essential C++ 学习笔记02--Array/Vector 与指针
Essential C++ 1.5-1.6节,3.1节笔记 Array/Vector/指针,难度偏大, 但若学习初期不熟悉基本用法,则难以写出有效代码. 1. 基本概念 Array 是一段连续内存,数 ...
- Essential C++ 学习笔记01--基本语法
<Essential C++>1.1-1.4节笔记 1. main 函数 main 函数是代码的入口,若无 main 函数,编译不通过. main 函数通常声明为 int, return ...
- Essential C#读书笔记
Essential C#读书笔记 这是一个多变的时代,一次又一次的浪潮将不同的人推上了巅峰.新的人想搭上这一波,同时老的人也不想死在沙滩上.这些年新的浪潮又一次推开,历史不停地重复上演,那便是移动互联 ...
- 《Essential C++》读书笔记 之 目录导航
<Essential C++>读书笔记 之 目录导航 2014-07-06 第一章:<Essential C++>读书笔记 之 C++编程基础 第二章:<Essentia ...
- 《Essential C++》读书笔记 之 C++编程基础
<Essential C++>读书笔记 之 C++编程基础 2014-07-03 1.1 如何撰写C++程序 头文件 命名空间 1.2 对象的定义与初始化 1.3 撰写表达式 运算符的优先 ...
- 《Essential C++》读书笔记 之 面向过程编程风格
<Essential C++>读书笔记 之 面向过程编程风格 2014-06-18 2.2 调用(invoking)一个函数 2.2.1 Pass by Reference语义 在函数sw ...
- 《Essential C++》读书笔记 之 泛型编程风格
<Essential C++>读书笔记 之 泛型编程风格 2014-07-07 3.1 指针的算术运算(The Arithmetic of Pointer) 新需求1 新需求2 新需求3 ...
- 《Essential C++》读书笔记 之 基于对象编程风格
<Essential C++>读书笔记 之 基于对象编程风格 2014-07-13 4.1 如何实现一个class 4.2 什么是Constructors(构造函数)和Destructor ...
随机推荐
- 在一个Activity中循环使用一组RadioGroup
一个activity是用来做题用的,效果如下图 在点击下一题时,RadioGroup会默认为第一次选中的状态,造成RadioButton选择混. 解决方案: 第一步:取消监听 radioGroup_p ...
- svg图片在vue脚手架vue-cli怎么使用
第一种 使用vue2-svg-icon npm install vue2-svg-icon --save-dev` 下载之后在mian.js引入 名字可以随便起,这里我起icon 引入svg资源 这时 ...
- 自学Java第三章——《流程控制语句结构》
流程控制语句结构分为: 1.顺序结构:从上到下依次执行 2.分支结构:多个分支选择其中一个分支执行 3.循环结构:重复执行某些代码 3.1 顺序结构 执行过程:从上到下顺序执行 3.1.1 输出语句 ...
- 死磕mysql(2)
想测试自己的查询语句,导入批量的数据,一开始很慢以为是自己的语句有问题,后来是这个autocommit,效率相差好多好多............ delimiter // create procedu ...
- 开源镜像站-Android镜像
mirrors.neusoft.edu.cn www.opencas.org ubuntu.buct.edu.cn Android developer 最新国内镜像:http://wear.techb ...
- 宅在家学不进去吗?试试这些 GitHub 上简单易学的游戏项目吧
作者:HelloGitHub-小鱼干 这是本人宅在家里的第 4 周,代码不想看,技术文章不想读,都不能愉快学习了我还怎么当一个优秀的需求消化师呢?有没有什么轻松地方法来学习技术呢?想起了小时候金山打字 ...
- CLion在项目里编译不同文件
1. 在完整的项目下找到CMakeList.txt(项目配置文件) 2. Build 和 Run的目标在add_executable参数中 3. 将其修改为如下格式:add_executable(pr ...
- Codeforces_512_B
http://codeforces.com/problemset/problem/512/B dp题,因为状态很多,所以用map保存,注意代码中的那个二层循环不能内外换,因为map会自动排序. #in ...
- WeChall_Enlightment (Encoding)
解题: 刚开始一看这题就蒙逼了,完全没思路,过了几天后再仔细去想想,应该是二进制的ascii码,但是原来的三张图虽然都是8的倍数,但完全转换不成有用的东西,题目的意思能否找到光,百度了一下关于三原色的 ...
- 2018icpc南京网络赛-L Magical Girl Haze (分层图最短路)
题意: 有向图,可以把k条路的长度变为0,求1到n的最短路 思路: 将图复制k份,一共k+1层图,对于每一条i→j,都连一条低层的i→高层的j,并且权值为0 即对每一对<i,j,w>,都加 ...