《C++ Primer Plus》ch08笔记

来源:互联网 发布:ubuntu给予文件夹权限 编辑:程序博客网 时间:2024/06/08 08:18

内联函数

  • 常规函数与内联函数的主要区别在于C++编译器如何将他们组合到程序中去,而不是编译方式有什么不同。
  • 编译过程的最终产品是可执行程序——由一组机器语言指令组成。运行程序时,操作系统将这些指令载入到内存中,且每个指令都有特定的内存地址。计算机随后逐步执行这些指令,有时会跳过一些指令(判断),或向前向后跳到特定的地址。
  • 内联函数实现方式:编译器使用相应的函数代码替代函数调用,程序无需跳到另一个位置执行代码。如果执行函数代码的时间比处理函数调用机制的时间短,内联调用就可以节省时间。
  • 内联的使用:省略函数原型,将函数定义放在本应提供函数原型的地方。
  • 通过将引用变量作为函数参数,函数将使用原始数据,而不是其副本。
  • 与const变量一样,必须在声明时就将引用初始化。
int& a = 10;int* const p = 10;    //a扮演的角色和*p相同。
int a = 10;int* p = &a;int& b = *p;int c = 100;p = &c;    //虽然p的指向变了,但b依然是a的引用
  • 按值传递导致被调用函数使用调用函数的值的拷贝。
  • 如果引用参数是const,则编译器将在下面两种情况下生成临时变量,再将调用函数参数的值传递给临时变量,并让参数来引用该临时变量。
    • 实参类型正确,但不是左值;
    • 实参类型不正确,但可以强制类型转化。
  • 左值:变量、数组元素、结构成员、解引用指针。非左值:字面常量、表达式。
  • 如果接受引用参数的函数的意图是修改作为参数传递的变量,则创建临时变量将阻止这种意图的实现。
  • 非引用的返回机制和按值传递函数参数类似,即返回值被复制到一个临时位置,主调函数使用这个临时值,即返回值的拷贝。
  • 返回引用的函数实际上是被引用的变量的别名。
  • 返回引用时,避免返回函数终止时不再存在的内存单元,如下。同理也避免返回指向临时变量的指针。解决的办法:1)返回一个作为参数的引用;2)使用new来申请新的内存空间,并返回指向该内存空间的该类型指针。
//free_throw为结构const free_throw& clone2(free_throw& ft){   free_throw newguy = ft;    return newguy;}
  • 引用参数是基于指针代码的另一个接口。

函数重载

  • 编译器在检查函数特征标时,将类型引用于类型本身视为同一个特征标,也不区分const和非const变量。
double cube(double x);double cube(double& x);    //出错void foo(int n);void foo(const int n);    //出错
  • 返回一个数字的前n位:
//num该数字,digits数字长度,n返回位数n = digits - n;while(n--)    num/=10;return num;
  • 返回一个字符串的前n位:
//str原字符串,n返回位数char* p = new char[n+1];int i;for(i=0;i<n && str[i];i++)    p[i] = str[i]; while(i<=n)    p[i++] = '\0';return p

构造函数与析构函数

  • 构造函数用于类初始化对象成员,其名称与类名相同,没有声明类型,可以重载。默认构造函数没有参数或所有参数都有默认值。
  • 如果构造函数使用了new,则必须提供使用delete的析构函数。

const成员函数

const Stock land = Stock("binggo");    //Stock为一个类land.show();    //show()为类Stock的成员函数//调用对象land用const修饰,而show()无法确保调用对象不被修改,故报错。void Stock::show() const    //在类定义时,用const修饰该成员函数,可确保show()不会修改调用对象。

this指针

  • 所有类方法都将this指针设置为调用它对象的地址,如果需要引用整个调用对象,则可以使用表达式*this。
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 我的电脑在开机时忘了密码怎么办? xp桌面我的电脑图标不见了怎么办 游戏全屏时卡了无法退到界面怎么办 u盘插电脑上提示有病毒怎么办 三星手机文件怎么删除不掉怎么办 用夜神模拟器玩第五人格太卡怎么办 雷电模拟器玩刺激战场太卡了怎么办 绝地求生刺激战场模拟器太卡怎么办 ddj sb2打碟功能没了怎么办 驼背怎么办 要能快速矫正的方法 苹果7中间的home键坏了怎么办 苹果6p的home键不管用怎么办 华为获取数据失败请检查网络怎么办 三星手机未解锁刷机变砖怎么办 手机显示充电但是充不进去怎么办 手机拔出显示无法连接移动网怎么办 手机上的音乐老是显示网络忙怎么办 华为手机账号换手机忘记密码怎么办 墨墨背单词的注册邮箱忘了怎么办 华为手机华为账号密码忘记了怎么办 手机玩游戏降频特别厉害怎么办 苹果应用商店id登录老卡怎么办 苹果id忘记了自动续费怎么办 红米手机小米账号密码忘了怎么办 小米5splus没系统卡米怎么办 注册谷歌账号输入手机好怎么办 谷歌注册电话号码用了太多次怎么办 内存卡用了深度清理的软件怎么办 华为畅享5s密码忘了怎么办 小米5s进水了一直开机关机怎么办 手机菜单键功能键返回键失灵怎么办 小米5s更新系统发热严重怎么办 小米手机4G网速不好怎么办力 红米5 plus开不开机怎么办 小米3s手机触屏部分失灵怎么办 魅族手机屏幕锁密码忘了怎么办 手机没设置魅族账号密码忘了怎么办 魅族手机格式化密码忘了怎么办 魅族手机忘记密码了怎么解锁怎么办 手机设置的应用加密忘记密码怎么办 手机上设置应用加密忘记密码怎么办