C++中的各类函数详解

目录

一、内置函数

二、标准库函数

三、用户自定义函数

四、成员函数

五、虚函数

六、函数模板

七、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类型的参数xfunction body部分使用了这个参数计算和,并将结果累加到sum变量中。[&sum]部分用于将sum变量作为Lambda表达式的外部变量进行捕获。由于Lambda表达式的返回值类型可以被推断出来,因此我们没有指定返回值类型。

  • 11
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宿舂粮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值