C++概述——原型、内联、重载、无名联合、引用等

函数原型

  • 语法

    返回值类型 函数名(参数表);

  • 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;//错误,不能建立引用数组
  1. 不能建立引用的引用,不能建立指向引用的指针

    ```c++ int n=3; int &&r=n//错误 int &*p=n//错误

  2. 可以将引用的地址赋值给指针

     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]; }

评论区 0