C++Primer笔记-----day04
1.函数指针。
函数指针指向某种特定类型,函数的类型由它的返回类型和形参类型决定,与函数名无关。
比如:bool lengthCompare(const string &,const string &);
该函数的类型为bool(const string &,const string &)
声明一个指向该函数的指针,只需将函数名替换为指针即可:bool (*pf)(const string &,const string &)。(*pf)的括号不可以省略!
使用函数指针:pf = funcName;或者pf = &funcName 均可。
需要注意的是,函数指针不存在转换规则,pf的类型必须与函数完全匹配(无论是函数返回值还是形参类型)
比如 string sumLength(const string&,const string&);
bool cstringCompare(const char*,const char*);
bool lengthCompare(const string &,const string &);
pf = sumLength; // 错误,函数返回类型不匹配
pf = cstringCompare; // 错误,形参类型不匹配
pf = lengthCompare; // 完全正确
我们还可以通过指向函数的函数指针直接调用该函数:bool b = pf("hello","goodbye");
2.关于this指针。
成员函数通过一个名为this的【额外的隐式参数】来访问调用它的那个对象。
当我们调用一个成员函数时,用请求该函数的对象的地址来初始化this
例如,类 A有一个成员函数foo();
A a;
a.foo(); // 编译器负责把a的地址传递给foo()的隐式形参this,相当于A::foo(&a)。
所以我们可以在成员函数的内部使用this,通过this直接访问对象的成员。
注意点:默认情况下,this的类型是指向类类型非常量版本的常量指针,在这个例子中为 A *const,所以this是一个常量指针,不允许改变this的地址,this总是指向“这个”对象。
this是一个常量指针,根据初始化规则,所以不能把this与常量对象绑定在一起,
所以,有时候需要修改this为const A *const,这时只需在成员函数的形参列表之后加一个const就可以完成。这类成员函数被称为常量成员函数。
常量对象,以及常量对象的引用、指针,都只能调用常量成员函数。
非常量对象可以调用常量成员函数,也可以调用非常量成员函数。
C++Primer笔记-----day04的更多相关文章
- C++ Primer笔记
C++ Primer笔记 ch2 变量和基本类型 声明 extern int i; extern int i = 3.14;//定义 左值引用(绑定零一变量初始值,别名) 不能定义引用的引用:引用必须 ...
- C++ Primer 笔记(1)基础中的战斗机 输入输出 对输入不定数据处理
今天打算再重新好好的看一遍C++ Primer这本很经典的书籍,笔记开始: 1.每个C++程序都包含一个或者多个函数,其中必须有一个main,操作系统通过调用main入手运行程序: 2.函数包括:返回 ...
- C++ Primer 笔记 第一章
C++ Primer 学习笔记 第一章 快速入门 1.1 main函数 系统通过调用main函数来执行程序,并通过main函数的返回值确定程序是否成功执行完毕.通常返回0值表明程序成功执行完毕: ma ...
- C++primer笔记之顺序容器
最近又重新拾起C++primer,发现每一次看都会有不同的体验,但每一次看后因为不常用,忘记得很快,所以记笔记是很关键的一环,咋一看是浪费时间,实际上是节省了很多时间.下面就把这一节的内容做一个简单的 ...
- c++ primer 笔记 (一)
昨天开始看的<C++ Primer>,确实不错.希望这周抓紧看完,每天做下笔记,以便以后复习. main函数返回一个值给操作系统 操作系统通过main函数返回的值来确定程序是否成功执行 ...
- Java编程基础阶段笔记 day04 Java基础语法(下)
day04 Java基础语法 (下) 笔记Notes要点 switch-case语句注意 switch-case题目(switchTest5) 循环执行顺序 if-else 实现3个整数排序 Stri ...
- C++ Primer笔记(1)——连续读取数据、类型对应的尺寸、类型转换、字符串分行写法
这次要看看C++ Primer,这本基本上就是必读书籍了.下面的内容就是一些之前没有学过的知识的笔记. 读取数量不定的输入数据 虽然很简单,但是还是记一下: #include <iostream ...
- C++Primer笔记(3)
标准库类型string表示可变长的字符序列,使用前先包含string头文件.(哈哈,终于可以逃脱C语言中的str函数系列了.)因为是标准库的一部分,所以string被定义在命名空间std中.所以你懂该 ...
- C++ Primer 笔记 第三章
C++ Primer 第三章 标准库类型 3.1using声明 例: using namespace atd; using std::cin; 3.2string类型 初始化方式 string s1 ...
随机推荐
- 【错误】More than one row with the given identifier was found: 1, for class:
问题原因: 数据库测试数据自己填入,两条数据的id都为1,所以报错 问题解决: 找到数据库表 删除全部数据
- div横排放置对齐问题;block,inline,inline-block区别
1.左右两个div都设置为float:left,如果右边div没有设置宽度,右边div的宽度会根据div里的内容自动调整. 缺点:不易控制 2.只有左侧div设置为float:left,右侧div设置 ...
- BZOJ1690 Usaco2007 Dec 奶牛的旅行 【01分数规划】
BZOJ1690 Usaco2007 Dec 奶牛的旅行 题目描述 作为对奶牛们辛勤工作的回报,Farmer John决定带她们去附近的大城市玩一天.旅行的前夜,奶牛们在兴奋地讨论如何最好地享受这难得 ...
- BZOJ2049 SDOI2008 Cave 洞穴勘测 【LCT】
BZOJ2049 SDOI2008 Cave 洞穴勘测 Description 辉辉热衷于洞穴勘测.某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由n个洞穴(分 ...
- 项目文件中的已知 NuGet 属性(使用这些属性,创建 NuGet 包就可以不需要 nuspec 文件啦)
知道了 csproj 文件中的一些常用 NuGet 属性,创建 NuGet 包时就可以充分发挥新 Sdk 自动生成 NuGet 包的优势,不需要 nuspec 文件啦.(毕竟 nuspec 文件没有 ...
- eclipse显示/隐藏代码行号
Window→Preferences→General→Editors→TextEditors→勾选Show line numbers
- 《selenium2 python 自动化测试实战》(20)——Selenium工具介绍
(一)Selenium IDE Firefox的一个插件,有助于我们理解测试框架.在附加组件里搜索下载,一般搜的结果里前几个都不是,得点那个查看更多才行,找到这个: 安装以后浏览器工具栏会有: 安装好 ...
- 后缀数组模板/LCP模板
//后缀数组模板,MANX为数组的大小 //支持的操作有计算后缀数组(sa数组), 计算相邻两元素的最长公共前缀(height数组),使用get_height(); //计算两个后缀a, 和b的最长公 ...
- ballerina 学习三 根据swagger 以及protobuf 生成code
备注: 基本环境安装就不用介绍了,swagger 以及grpc 同时也不用介绍了,都是比较简单的代码,就是一个简单的测试 1. 初始化项目 ballerina init 项目结构如下: ├── R ...
- Apache Tez 了解
你可能听说过Apache Tez,它是一个针对Hadoop数据处理应用程序的新分布式执行框架.但是它到底是什么呢?它的工作原理是什么?哪些人应该使用它,为什么?如果你有这些疑问,那么可以看一下Bika ...