C++中的各类函数详解

  • Post author:
  • Post category:其他



目录


一、内置函数


二、标准库函数


三、用户自定义函数


四、成员函数


五、虚函数


六、函数模板


七、Lambda表达式


C++中的函数主要分为以下几类:内置函数、标准库函数、用户自定义函数、成员函数、虚函数和函数模板。下面分别介绍这些函数的特点和用法。

一、内置函数

C++语言本身提供了一些内置函数,它们是编译器自带的函数,可以直接在程序中使用。常见的内置函数包括数学函数、字符串函数、类型转换函数等。例如,

sin()

函数用于计算正弦值,

strlen()

函数用于计算字符串的长度,

atoi()

函数用于将字符串转换为整数等。这些函数都属于C++的标准库函数,因此在程序中无需显式包含相应的头文件即可直接使用。

二、标准库函数

标准库函数是C++标准库提供的一组函数,它们可以实现各种常见的操作,包括输入输出、容器操作、算法操作等。标准库函数通常定义在各自的头文件中,例如

<iostream>

头文件中定义了输入输出函数,

<vector>

头文件中定义了向量容器类,

<algorithm>

头文件中定义了各种算法函数等。

三、用户自定义函数

用户自定义函数是程序员自己定义的函数,可以根据实际需求定义不同类型的函数来实现不同的功能。用户自定义函数的基本结构包括函数头和函数体,其中函数头包括函数名、参数列表和返回值类型,函数体包括函数的具体实现。例如,下面是一个简单的用户自定义函数示例:

int add(int a, int b) {
  return a + b;
}

int main() {
  int sum = add(1, 2);  // 调用add()函数计算1+2的和
  cout << sum << endl;  // 输出3
  return 0;
}

在这个示例中,

add()

函数是一个用户自定义函数,它接受两个整数参数并返回它们的和。在

main()

函数中,我们调用了

add()

函数来计算1和2的和,并将结果存储在变量

sum

中。

四、成员函数

成员函数是定义在类中的函数,它们可以访问类的私有成员和保护成员。成员函数的调用方式包括通过对象和通过指针。通过对象调用成员函数时,可以使用点运算符

.

来访问成员函数;通过指针调用成员函数时,可以使用箭头运算符

“->”

来访问成员函数。

下面是一个简单的成员函数示例:

class Rectangle {
public:
  int area() {
    return width * height;
  }
private:
  int width;
  int height;
};

int main() {
  Rectangle rect;
  rect.width = 5;
  rect.height = 4;
  int area = rect.area();  // 通过对象调用area()函数计算面积
    cout << area << endl; // 输出20 return 0; 
}

在这个示例中,`Rectangle`类定义了一个名为`area()`的成员函数,用于计算矩形的面积。在`main()`函数中,我们创建了一个`Rectangle`对象,并通过点运算符`.`调用`area()`函数来计算矩形的面积。

五、虚函数

虚函数是一种在基类中声明、在派生类中实现的函数,用于实现多态。虚函数允许派生类重写基类的函数,从而实现不同的功能。当通过基类指针或引用调用虚函数时,实际调用的是派生类中的函数。

下面是一个简单的虚函数示例:

class Shape {
public:
  virtual int area() {
    return 0;
  }
};

class Rectangle : public Shape {
public:
  Rectangle(int w, int h) : width(w), height(h) {}
  int area() {
    return width * height;
  }
private:
  int width;
  int height;
};

int main() {
  Shape *shape = new Rectangle(5, 4);
  int area = shape->area();  // 调用Rectangle中的area()函数计算面积
  cout << area << endl;  // 输出20
  delete shape;
  return 0;
}

在这个示例中,

Shape

类定义了一个虚函数

area()

,并将其声明为虚函数,以便在派生类中重写。

Rectangle

类是

Shape

类的派生类,它重写了

area()

函数以计算矩形的面积。在

main()

函数中,我们通过

Shape

指针创建了一个

Rectangle

对象,并调用了

area()

函数来计算矩形的面积。

六、函数模板

函数模板是一种通用的函数定义,可以用来创建多个具有相似功能的函数。函数模板定义时使用类型参数,可以在函数调用时指定具体的类型,从而创建对应的函数。函数模板可以用于任何类型,包括内置类型、用户自定义类型和标准库类型。

下面是一个简单的函数模板示例:

template<typename T>
T max(T a, T b) {
  return a > b ? a : b;
}

int main() {
  int i = max(1, 2);
  double d = max(3.14, 2.71);
  cout << i << endl;  // 输出2
  cout << d << endl;  // 输出3.14
  return 0;
}

在这个示例中,

max

函数是一个函数模板,它用于返回两个参数中的最大值。函数模板的类型参数是

T

,可以用于任何类型。在

main()

函数中,我们调用了两次

max

函数,一次使用整数参数,一次使用双精度浮点数参数。由于编译器能够自动推断出函数模板的类型参数,因此我们不需要显式地指定类型参数。

七、Lambda表达式

Lambda表达式是C++11中引入的一种新的函数定义语法。它可以在需要函数的任何地方定义一个函数,而不必显式地声明函数类型和名称。Lambda表达式通常用于作为参数传递给其他函数,或作为STL算法的操作函数。

Lambda表达式的一般语法如下:

[capture list](parameter list) -> return type {
  function body
}

其中,

capture list

用于指定Lambda表达式访问的外部变量;

parameter list

用于指定函数参数;

return type

用于指定函数返回值类型(可以省略);

function body

用于定义函数的代码。

下面是一个Lambda表达式示例:

#include <algorithm>
#include <iostream>
#include <vector>

using namespace std;

int main() {
  vector<int> v = {1, 2, 3, 4, 5};
  int sum = 0;
  for_each(v.begin(), v.end(), [&sum](int x) { sum += x; });
  cout << sum << endl;  // 输出15
  return 0;
}

在这个示例中,我们使用STL算法

for_each

遍历了一个整数向量,并使用Lambda表达式计算向量中所有整数的和。Lambda表达式的参数列表包含了一个

int

类型的参数

x



function body

部分使用了这个参数计算和,并将结果累加到

sum

变量中。

[&sum]

部分用于将

sum

变量作为Lambda表达式的外部变量进行捕获。由于Lambda表达式的返回值类型可以被推断出来,因此我们没有指定返回值类型。



版权声明:本文为qxt1508520947原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。