c++primer plus 第六版 第八章重点内容总结 以及编程题答案

1.内联函数

 

为提高程序运行速度,不必在调用函数时跳到另一个位置执行代码再跳回来。采用内联函数,内联函数的编译代码与其他程序代码“内联”起来,即编译器将使用相应的函数代码替换函数调用。速度提高,但内存开销变大。

 

注意在函数声明之前+inline,在函数定义前+inline。通常做法是省略原型,将整个定义放在本应提供原型的地方。(内联不能使用递归,有些编译器可能没有这种特性)。一般来说冗长的代码段函数不大适宜用作内联函数。

 

注意c语言中的#define宏定义是通过文本替换(而不是传递参数)实现的,如#define SQUARE(X) X*X

若提供5,结果是5*5.提供4.5+7.5,结果是4.5+7.5*4.5+7.5.若提供c++,结果是c++*c++.

 

2.引用变量

 

引用是已定义的变量的别名,主要用途是作函数的形参。将引用变量作为参数,函数将使用原始数据而不是其副本。&除了取地址符,也用来声明引用。如int rats;int &redents=rats;

注意这是将redents作为rats的别名。此时&作为类型标识符的一部分。Int &代表是指向int的引用。上述引用允许将rats和rodents互换,它们指向相同的值和内存单元。即cout<<rats<<rodents; 是相同的一个变量。注意必须在声明引用时将其初始化。指针可以先声明再赋值。

 

引用更接近const指针,必须在创建时进行初始化,一旦与某个变量关联起来就将一直效忠于它。即int &rodents=rats;与 int *const pr=&rats;类似。如果通过赋值给rodent一个新值(新变量),那么rodent和rat的值变成了新值,但它们的地址还是原来的地址,与新值的地址并不一样。又或者引用绑定在一个指针上,即使指针变化指向其他值,引用指向的还是原值。

 

3.将引用用作函数参数

 

引用被当作函数参数时,函数中的变量名成为调用程序中变量的别名。按引用传递允许被调用函数可以访问调用函数中的变量。按值传递是两个变量,两个名称。按引用传递是一个变量两个名称。引用作形参,调用时直接给变量,相当于把形参初始化为传递的实参,指针做形参,调用时用&给出地址。当意图让函数使用传递给它的信息而不需修改时,则应使用传值,但若要想用引用,那么应该使用const限定,如double( const double &ra);另外当数据比较大时,引用参数将比较有用。注意传递引用的限制更加严格,如果ra是一个变量的别名则实参应是该变量。(x+3就不行)

 

在当前情况下,实参与引用参数不匹配,仅当参数为const引用时,c++将生成临时变量。即对于形参是const引用的c++函数,如果实参不匹配,则其行为类似按值传递,为确保原始数据不被修改,将使用临时变量来存储值。如果函数调用的参数不是左值(变量,数组元素,结构成员,引用和解除引用的指针,非左值包括字面常量,用引号括起来的字符串除外,它们由其地址表示)或者与相应的const引用参数类型不匹配的,则c++将创建类型正确的匿名变量。将函数调用的参数的值传给该匿名变量并让参数来引用该变量。

 

4.将引用用于结构

 

函数原型还是一样,如void set_pc (free_throws &ft); 如果不希望函数修改传入的结构可使用const。void display(const free_throw &ft); 初始化结构时,如果指定的初始值比成员少,余下的成员将被设置为0. 如果函数返回的是引用那么可以进行这样的赋值,accumulate(dup,five)=four;传统的返回机制与按值传递函数类似,计算return后面的表达式并将结果返回给调用函数。也就是说这个值被复制到一个临时位置,而调用程序将使用这个值。如果函数返回一个结构,将把整个结构复制到一个临时位置,再将这个拷贝复制给dup(变量)。但在返回引用时,将直接把返回值复制到dup。

 

注意要避免返回指向函数内部临时变量的引用,最简单的方法则是返回一个作为参数传递给函数的引用,作为参数的引用将指向调用函数使用的数据。另一种方法是使用new来分配新的存储空间。使用引用可以完成类似工作如

const free_throw & clone(free_throw & ft)

{

   free_throws *pt; *pt=ft; return *pt;

}

 

5.将引用用于类对象

 

将类对象传递给函数时通常做法是使用引用,让函数将类string,ostream,istream,ofstream和ifstream等类的对象作为参数。注意string类允许使用char *的c-风格字符串来初始化string对象。

 

类型为const引用的形参的一个属性是:假设实参的类型与引用参数类型不匹配但可被转化为引用类型,程序将创建一个正确类型的临时变量,使用转换后的实参值来初始化它,然后传递一个指向该临时变量的引用。可以将实参char *(如引号括起来的字符串字面量,空字符结尾的char数组或指向char的指针变量),const char*传递给形参const string&。坚决不能返回局部变量的引用!!!

 

6.对象,继承和引用

使得能够将特性从一个类传递给另一个类的语

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值