码迷,mamicode.com
首页 > 编程语言 > 详细

c++内容复习之函数

时间:2015-04-22 01:52:30      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:

形参与实参的区别

函数的形参为函数提供了已命名的局部存储空间。形参是在函数的形参表中定义的,并由调用函数时传递给函数的实参初始化。

实参与形参必须有类型相同或者可以隐式转换。

 

形参的初始化与变量的初始化一样,如果形具有非引用类型,则复制实参的值,如果形参为引用类型,则只是实参的别名。

对形参修改的函数,不会改变实参的值,只是修改实参的副本。

 

1.指针形参 

函数可通过指针实现赋值,修改指针所指向对象的值。

2.const形参

 

复制实参的局限性

当需要在函数中修改实参的值时。

当需要大型对象作为实参传递时,复制对象所付出的时间和存储空间往往过大。

当没有办法实现对象的复制时。

 

引用形参

使用const引用避免复制发数据。如果使用引用形参的唯一目的是避免复制实参 ,不修改实参, 则应将形参定义为const引用。

 

非const引用形参只能与完全同类型的非const对象关联。

不需要修改的引用形参定义为const引用。普通的非const引用形参在使用时不太灵活。这样的形参不能用const对象初始化,也不能用字面值或者产生的右值的表达式实参初始化。例子如下:

string:: size_type find_char(string &s, char c)

{

  string:: size_type i=0;

  while(i!=s.size() && s[i] !=c)

    ++i;
  return i;

}

find_str("hello world",o);// 此种写法会导致编译失败

 

数组形参 

数组两个特性 一是不能复制数组 二是使用数组名字的时候,数组名会自动转化为指向第一个元素的指针。

 

 

 

局部对象

1. 自动对象

局部变量的生命期局限于所在函数的每次执行期间,只有它的函数被调用时才存在的对象称为自动对象

自动对象包括形参,都会在定义它们的快语句结束时撤销。

2.静态局部对象

static 位于函数作用域内,生命期跨越这个函数多次调用。程序结束才会被撤销。

 

内联函数

调用函数比求解等价表达式慢得多。

调用函数需要的过程:调用前要先保存寄存器,并在返回时恢复,复制实参,程序转向一个新位置。

内联机制只适用于优化小的,只有几行的而且经常被调用的函数

inline const string & shorterString(const string &s1, const string &2)

{

  return s1.size()<s2.size() ? s1: s2;

}

1.内联函数可以减轻开销

cout<<shorterString(s1,s2)<<endl;

编译时展开为:cout<<(s1.size()<s2.size()?s1:s2);

2.内联函数放入头文件

内联函数的定义在头文件中

 

类的成员函数

1.类的成员函数 可以访问 private 成员

2.在类外定义成员函数 

double Sales_item:: avg_price() const

{

  if(units_sold)

   return revenue/units_sold;

  else

    return 0;
}

const 表示函数被声明为const成员函数。

 

c++内容复习之函数

标签:

原文地址:http://www.cnblogs.com/agle/p/4446078.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!