【面向对象编程c++】| 数组与函数

一、数组

数组是固定大小、相同类型元素的顺序集合,用来存储一系列同类型数据,可以看作一组相同类型的变量。

1. 一维数组

语法:

cpp 复制代码
type array[arraySize];

示例:

cpp 复制代码
double balance[5] = {1000.0, 2.0, 3.9};

要点:

  • 如果省略数组大小,数组长度等于初始化列表里元素的个数。
  • 数组下标从 0 开始,通过数组[下标]访问元素。

2. 二维数组(多维数组)

多维数组:有几个方括号[],就是几维数组。 语法:

复制代码
type arrayName[x][y];

行索引、列索引全部从 0 开始。

二维数组初始化

可以按行分组初始化(推荐,可读性好):

cpp 复制代码
int a[3][4] = {
    {0, 1, 2, 3},   /* 初始化索引为 0 的行 */
    {4, 5, 6, 7},   /* 初始化索引为 1 的行 */
    {8, 9, 10, 11}  /* 初始化索引为 2 的行 */
};

嵌套花括号可以省略,会按顺序依次填充元素,效果完全相同:

复制代码
int a[3][4] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
访问二维数组元素

通过行下标、列下标访问数组元素:

复制代码
int val = a[2][3];

含义:获取数组第 3 行、第 4 个元素(下标从 0 开始)

3. 字符数组

专门用来存放字符的数组。


二、函数

函数是一组一起执行一个任务的语句。 每个 C++ 程序至少有一个函数:主函数 main();我们可以自定义额外函数。

  • 代码可以拆分到不同函数,拆分原则:一个函数只负责完成一项特定任务。
  • 函数声明:告诉编译器函数名、返回类型、参数信息;函数主体单独定义。
  • 函数定义:写函数的实际执行代码。
  • C++ 标准库内置大量函数:
    • strcat():拼接两个字符串
    • memcpy():内存拷贝

函数别名:方法、子例程、程式、程序

1. 函数定义

通用格式

cpp 复制代码
return_type function_name( parameter list )
{
   body of the function
   return return_type;
}

函数由函数头 + 函数主体组成:

  • 返回类型 :函数返回值的数据类型;无返回值时写 void。
  • 函数名称 :函数名字,函数名 + 参数列表构成函数签名。
  • 参数 :形参,相当于占位符;调用函数时传入的值叫实参。参数列表规定参数类型、顺序、数量;参数可选,函数可以无参数。
  • 函数主体:花括号内,实现功能的代码语句。

2. 函数声明

告诉编译器如何调用该函数,函数实现可以放在后面或者别的文件。 语法:

复制代码
return_type function_name( parameter list );

示例:

复制代码
int max(int num1, int num2);

声明中,参数名可以省略,只保留类型,下面写法合法:

复制代码
int max(int, int);

使用场景:函数定义写在别的.cpp源文件时,必须在调用文件顶部写函数声明。

3. 函数调用 & 值传递

形式参数(形参):定义函数时括号里的变量 实际参数(实参):调用函数时传入的参数,可以是常量、变量、表达式

值传递特点(单向传递)

  1. 调用函数时,实参把值拷贝给形参;不能把形参修改传回实参。
  2. 函数内部修改形参,不会影响外面的实参。

完整示例代码:

cpp 复制代码
#include <iostream>
using namespace std;
// 函数声明
int max(int num1, int num2);

int main ()
{
    // 局部变量声明
    int a = 100;
    int b = 200;
    int ret;
    // 调用函数来获取最大值
    ret = max(a, b);
    cout << "Max value is : " << ret << endl;
    return 0;
}

// 函数返回两个数中较大的那个数
int max(int num1, int num2)
{
    // 局部变量声明
    int result;
    if (num1 > num2)
        result = num1;
    else
        result = num2;
    return result;
}

输出

复制代码
Max value is : 200

4. 函数默认参数

C++ 中,形参可以设置默认值。 语法:返回值类型 函数名 (参数 = 默认值) {}

cpp 复制代码
int func(int a, int b = 10, int c = 10) {
    return a + b + c;
}

// 规则:
//1. 如果某个位置参数有默认值,那么从这个位置往后,从左向右,必须都要有默认值
//2. 如果函数声明写了默认值,函数实现定义时,不能再写默认参数
int func2(int a = 10, int b = 10);
int func2(int a, int b) {
    return a + b;
}

int main() {
    cout << "ret = " << func(20, 20) << endl;
    cout << "ret = " << func(100) << endl;
    system("pause");
    return 0;
}

5. 内联函数

在函数定义最前面加关键字 inline。 作用:减少函数调用开销,节省程序运行时间。

相关推荐
我命由我123452 小时前
Android 广播 - 组件通信
android·java·开发语言·android studio·android jetpack·android-studio·android runtime
Wang's Blog2 小时前
Java 项目实战: 交友项目 - 安装 Nacos 注册中心与 Dubbo 监控中心
java·dubbo·交友
起个名字费劲死了2 小时前
VisionMaster 十二点标定+单点抓取
c++·visionmaster
李福春2 小时前
斗破Google ADK Java苍穹-第2境斗者-凝旋筑基-Java环境
java·开发语言·gemini·llmagent·深圳同盟·腾讯云架构师技术同盟·adk java
霸道流氓气质3 小时前
LLM API密钥管理与轮换策略:Spring Vault动态密钥、熔断限流协同与多Provider路由的 Java 生产级实现
java·后端·spring
兔头?3 小时前
使用JDK21新特性虚拟线程时遇到的坑
java
m0_587383003 小时前
无人自助拼豆系统从需求分析到落地部署全流程实战开发指南
java·经验分享·后端·struts·小程序·架构·需求分析
a努力。3 小时前
四维解析Agent记忆架构:从零实战LangGraph长期记忆
java·开发语言·数据库