函数原型
-
语法
返回值类型 函数名(参数表);
-
C和C++的区别
C在声明函数原型时,可以省略返回值类型和参数表,但在C++中对返回值类型和参数表为强制要求(我认为是因为C++引入了重载机制)
内联函数
- 函数说明前冠以inline关键字的函数,又称内置函数
- 作用:每当程序中出现对该函数的调用时,C++编译器使用函数体中的代码插入到调用该函数的语句处,同时用实参取代形参,以便在程序运行时不再进行函数调用,加快运行
```c++
include
using namespace std; inline int box(int i,int j, int k); int main(){ int a,b,c,v; cin>>a>>b>>c; v=boc(a,b,c);//等价于在这里执行 v=abc; cout<<"abc="<<v<<endl; return 0; } inline int box(int i,int j,int k){ return ijk; }
# 带有默认参数的函数
* 在声明函数时所有**指定了默认值的参数**都必须出现在**不指定默认值的参数右边**
* 在函数调用是,若某个参数省略,则其后的参数皆应省略而采用默认值
* 如果函数的定义在函数调用之前,则应在函数定义中指定默认值。相反,如果**函数的定义在函数调用之后**,则在函数调用之前必须进行函数声明,此时**必须在函数声明中给出默认值**,而在**函数定义时就不要给出默认值**
# 函数重载
* 调用重载函数时,函数返回值类型不在参数匹配之列,因此,若两个函数的参数个数和类型都相同,只有返回值类型不同,则不允许重载
* 函数的重载和带默认参数的函数一起使用时,有可能引起二义性
```c++
void DrawCircle(int r=0,int x,int y);
void DrawCircle(int r);
//调用时
DrawCircle(20)//无法确定是那个函数
- 在函数调用时,如果给出的实参与形参类型不一致,C++编译器会自动地进行类型转换工作
作用域运算符“::”
- 如果希望在局部变量的作用域中使用同名的全局变量,可以在该变量前加上"::"
无名联合
- 无名联合时C++中的一种特殊联合,在union关键字之后没有联合名,不能访问无名联合变量,只能访问其成员
```c++ union { int i; double d; } x; x//错误 x.i; x.d;
# 运算符new和delete
* >指针变量名=new 类型
>
>指针变量名=new 类型(初值)
>
>delete 指针变量名
* 为数组动态分配空间
> ```指针变量名=new 类型[整数] [整数]...```
>```delete []指针变量名```
# 引用
* 声明引用的格式
类型 & 引用名=已定义的变量名
**类型 &** 等价于 **类型 * const** 指向对象不能改变
* 说明:
1. 除了用作函数的参数或返回类型外,在声明引用时,必须对它进行初始化,不能在声明完成后再赋值
2. 为引用提供的初始值,可以是一个变量,也可以是另一个引用
3. 引用在初始化后不能再赋值,即不能改变为另一个变量的引用
4. 无void类型的引用
5. 不能建立引用的数组
```c++
int a[4]='abcd';
int &ra[4]=a;//错误,不能建立引用数组
-
不能建立引用的引用,不能建立指向引用的指针
```c++ int n=3; int &&r=n//错误 int &*p=n//错误
-
可以将引用的地址赋值给指针
int num=50; int &ref=num; int *p=&ref;
-
引用作为函数参数
返回值类型 函数名(类型& 变量名,类型& 变量名,....)
在函数中对引用的操作,直接作用于实参,简化了C中传指针作为参数的写法,经典案例swap函数
-
使用引用返回函数值
采用这种方法可以将函数调用放在幅值运算符的左边
```c++
include
using namespace std; int a[]={1,3,5,7,9}; int &index(int); int main(){ index(2)=25; cout<<index(2)<<endl; return 0; } int &index(int i){ return a[i]; }