《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。
阅读全文
0 0
- 《C++ Primer Plus》ch08笔记
- C Primer Plus - 笔记
- c primer plus笔记
- c primer plus 笔记
- 《C Primer Plus》笔记
- C++Primer Plus学习笔记
- 《C Primer Plus》学习笔记
- c primer plus 程序笔记
- 《C Primer Plus》学习笔记
- C Primer Plus 学习笔记
- C Primer Plus笔记-第一章
- 《c primer plus》笔记<一>
- C Primer Plus Fifth Edition 笔记chapter1
- C Primer Plus Fifth Edition 笔记chapter2
- 《C++.Primer.Plus》学习笔记(一)
- 《C++.Primer.Plus》学习笔记(二)
- (c primer plus第五版) 学习笔记
- 《C primer plus》笔记--Chapter 1
- Recurrent neural networks deep dive
- C++ MFC / VS2013 之四 对话框:(创建对话框模板和修改对话框属性)
- Linux Shell高级技巧(一)
- 附加数据库失败,操作系统错误 5:"5(拒绝访问。)"的解决办法
- Recording_linux c++下 try catch用法
- 《C++ Primer Plus》ch08笔记
- poj1595-Prime Cuts
- 正则表达式学习笔记3-练习
- C++11启动线程的多种方式
- 学习笔记之观察者模式
- Linux 在一个命令行上执行多个命令
- 自由幻想UI之技能面板
- 集合框架之List
- 数据库——事务