C++函数总结

在 C++ 中,函数是一段完成特定任务的独立代码块,可提高代码的复用性和可维护性。以下从函数的定义、声明、调用、参数传递、返回值、重载、递归等多个方面进行详细总结。
1. 函数定义
函数定义由函数头和函数体组成,函数头包含返回类型、函数名和参数列表,函数体包含具体的代码实现。

// 函数定义示例
int add(int a, int b) {
    return a + b;
}

上述代码定义了一个名为 add 的函数,它接受两个 int 类型的参数 a 和 b,并返回它们的和。

2. 函数声明
函数声明告知编译器函数的名称、返回类型和参数列表,使得函数在定义之前可以被调用。

// 函数声明
int add(int a, int b);

// 主函数
int main() {
    int result = add(3, 4);
    return 0;
}

// 函数定义
int add(int a, int b) {
    return a + b;
}

在上述代码中,先对 add 函数进行了声明,然后在 main 函数中调用该函数,最后进行函数定义。

3. 函数调用
函数调用是通过函数名和实参列表来执行函数的过程。

#include <iostream>

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

int main() {
    int num1 = 3, num2 = 4;
    int result = add(num1, num2);  // 函数调用
    std::cout << "The result is: " << result << std::endl;
    return 0;
}

在 main 函数中,调用 add 函数并将 num1 和 num2 作为实参传递给它,将返回值赋给 result 变量。

4. 参数传递
C++ 支持三种参数传递方式:值传递、引用传递和指针传递。
值传递
值传递是将实参的值复制给形参,函数内部对形参的修改不会影响实参。

void swap(int a, int b) {
    int temp = a;
    a = b;
    b = temp;
}

int main() {
    int x = 1, y = 2;
    swap(x, y);
    // x 和 y 的值不会改变
    return 0;
}

引用传递
引用传递是将实参的引用传递给形参,函数内部对形参的修改会影响实参。

void swap(int& a, int& b) {
    int temp = a;
    a = b;
    b = temp;
}

int main() {
    int x = 1, y = 2;
    swap(x, y);
    // x 和 y 的值会交换
    return 0;
}

指针传递
指针传递是将实参的地址传递给形参,函数内部可以通过指针修改实参的值。

void swap(int* a, int* b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

int main() {
    int x = 1, y = 2;
    swap(&x, &y);
    // x 和 y 的值会交换
    return 0;
}

5. 返回值
函数可以有返回值,也可以没有返回值(返回类型为 void)。返回值通过 return 语句返回。

// 有返回值的函数
int getValue() {
    return 10;
}

// 无返回值的函数
void printMessage() {
    std::cout << "Hello, World!" << std::endl;
}

6. 函数重载
函数重载是指在同一作用域内定义多个同名函数,但它们的参数列表不同(参数个数、类型或顺序不同)。

#include <iostream>

// 重载函数 1
int add(int a, int b) {
    return a + b;
}

// 重载函数 2
double add(double a, double b) {
    return a + b;
}

int main() {
    int result1 = add(3, 4);
    double result2 = add(3.5, 4.5);
    return 0;
}

在上述代码中,add 函数被重载,一个接受两个 int 类型的参数,另一个接受两个 double 类型的参数。

7. 递归函数
递归函数是指在函数内部调用自身的函数。递归函数通常包含递归终止条件和递归调用。

// 计算阶乘的递归函数
int factorial(int n) {
    if (n == 0 || n == 1) {
        return 1;  // 递归终止条件
    } else {
        return n * factorial(n - 1);  // 递归调用
    }
}

8. 默认参数
函数的参数可以有默认值,在调用函数时,如果没有提供相应的实参,则使用默认值。

#include <iostream>

// 带有默认参数的函数
void printMessage(const std::string& message = "Hello, World!") {
    std::cout << message << std::endl;
}

int main() {
    printMessage();  // 使用默认参数
    printMessage("Goodbye!");  // 提供实参
    return 0;
}

9. 内联函数
内联函数是一种特殊的函数,编译器会将函数体直接嵌入到调用处,减少函数调用的开销。

// 内联函数
inline int add(int a, int b) {
    return a + b;
}

常用内置函数

1. 数学函数
数学函数主要包含在 头文件中,用于执行各种数学运算。

  • sqrt():计算平方根。
#include <iostream>
#include <cmath>

int main() {
    double num = 16.0;
    double result = std::sqrt(num);
    std::cout << "Square root of " << num << " is " << result << std::endl;
    return 0;
}
  • pow():计算幂次方。
#include <iostream>
#include <cmath>

int main() {
    double base = 2.0;
    double exponent = 3.0;
    double result = std::pow(base, exponent);
    std::cout << base << " raised to the power of " << exponent << " is " << result << std::endl;
    return 0;
}
  • sin()、cos()、tan():计算三角函数值。
#include <iostream>
#include <cmath>

int main() {
    double angle = 45.0;
    double radians = angle * M_PI / 180.0;  // 角度转弧度
    double sine = std::sin(radians);
    double cosine = std::cos(radians);
    double tangent = std::tan(radians);
    std::cout << "sin(" << angle << ") = " << sine << std::endl;
    std::cout << "cos(" << angle << ") = " << cosine << std::endl;
    std::cout << "tan(" << angle << ") = " << tangent << std::endl;
    return 0;
}

2. 字符串处理函数
字符串处理函数主要包含在 或 头文件中。

使用 处理 C 风格字符串

  • strlen():计算字符串的长度。
#include <iostream>
#include <cstring>

int main() {
    const char str[] = "Hello";
    size_t length = std::strlen(str);
    std::cout << "Length of the string is " << length << std::endl;
    return 0;
}
  • strcpy():复制字符串。
#include <iostream>
#include <cstring>

int main() {
    char source[] = "Hello";
    char destination[10];
    std::strcpy(destination, source);
    std::cout << "Copied string: " << destination << std::endl;
    return 0;
}

使用 处理 C++ 风格字符串

  • length() 或 size():计算字符串的长度。
#include <iostream>
#include <string>

int main() {
    std::string str = "Hello";
    size_t length = str.length();
    std::cout << "Length of the string is " << length << std::endl;
    return 0;
}
  • substr():提取子字符串。
#include <iostream>
#include <string>

int main() {
    std::string str = "Hello, World!";
    std::string sub = str.substr(7, 5);  // 从索引 7 开始,提取 5 个字符
    std::cout << "Substring: " << sub << std::endl;
    return 0;
}

3. 输入输出函数
输入输出函数主要包含在 头文件中。

  • std::cin:用于从标准输入读取数据。
#include <iostream>

int main() {
    int num;
    std::cout << "Enter a number: ";
    std::cin >> num;
    std::cout << "You entered: " << num << std::endl;
    return 0;
}
  • std::cout:用于向标准输出输出数据。
#include <iostream>

int main() {
    std::cout << "Hello, World!" << std::endl;
    return 0;
}

4. 类型转换函数
类型转换函数用于在不同数据类型之间进行转换。

  • static_cast:用于基本数据类型的转换和具有继承关系的指针或引用之间的转换。
#include <iostream>

int main() {
    double num = 3.14;
    int integer = static_cast<int>(num);
    std::cout << "Converted integer: " << integer << std::endl;
    return 0;
}
  • std::stoi、std::stof 等:用于字符串到基本数据类型的转换。
#include <iostream>
#include <string>

int main() {
    std::string str = "123";
    int num = std::stoi(str);
    std::cout << "Converted integer: " << num << std::endl;
    return 0;
}

5. 内存管理函数
内存管理函数主要包含在 头文件中。

malloc():分配内存。
#include <iostream>
#include <cstdlib>

int main() {
    int* ptr = static_cast<int*>(std::malloc(5 * sizeof(int)));
    if (ptr != nullptr) {
        for (int i = 0; i < 5; ++i) {
            ptr[i] = i;
        }
        for (int i = 0; i < 5; ++i) {
            std::cout << ptr[i] << " ";
        }
        std::cout << std::endl;
        std::free(ptr);
    }
    return 0;
}

6. 时间函数
时间函数主要包含在 头文件中。

  • time():获取当前时间。

#include
#include

int main() {
    std::time_t currentTime = std::time(nullptr);
    std::cout << "Current time: " << std::ctime(&currentTime);
    return 0;
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值