C++基础 — 函数总结
一、函数核心作用把一段重复、独立的逻辑封装起来一次定义、多处调用实现代码复用、逻辑分层、降低维护成本。C函数分为普通全局函数、类成员函数构造/析构/普通成员/静态成员/常函数、内联函数、模板函数、Lambda匿名函数。二、函数基础语法1. 完整结构// 返回值类型 函数名(参数列表) { 函数体; return 返回值; } int add(int a, int b) { return a b; }1. 返回值类型函数执行完返回的数据类型无返回写 void2. 函数名标识符见名知意不能是关键字3. 参数列表0个/多个逗号分隔形参定义处、实参调用处4. 函数体大括号内执行逻辑5. return终止函数带回返回值void函数可省略 return2. 无参、无返回示例void printHello() { std::cout Hello C std::endl; } // 调用 printHello();3. 有参有返回double mul(double x, double y) { return x * y; } double res mul(3.14, 2);三、函数声明 vs 函数定义对应.h/.cpp1. 声明只告诉编译器函数长什么样无实现放在头文件 .h作用提前告知接口解决“调用在定义前”报错。语法末尾加分号。// 声明 int add(int a, int b);2. 定义完整实现逻辑放在 .cpp只能定义一次。int add(int a, int b) { return a b; }工程规范.h放函数声明.cpp#include 对应头文件写函数实现四、函数参数四大传递方式1. 值传递拷贝最常用实参拷贝一份给形参函数内修改形参不影响外部变量。void test(int x) { x 100; // 只改副本 } int a 10; test(a); // a 依旧是 10缺点大对象string、类拷贝开销大。2. 引用传递 常引用/const1普通引用 T形参是实参别名修改形参直接改外部变量无拷贝开销。void modify(int x) { x 999; } int num 10; modify(num); // num 9992const 常引用 const T最优传参只读取、不修改无拷贝、不能改原数据传递字符串/类首选。void showStr(const std::string s) { std::cout s; // s xxx; // 报错const 不可修改 }3. 指针传递 T*传递变量地址通过解引用修改原值兼容C语言。void setVal(int* p) { *p 666; } int n 1; setVal(n);4. 数组参数数组传参等价于指针会丢失长度需额外传大小。void printArr(int arr[], int len) { for (int i 0; i len; i) std::cout arr[i]; }五、默认参数定义函数时给参数预设值调用不传则使用默认值。规则带默认值的参数必须靠右。// 正确默认参数放后面 void func(int a, int b 10, double c 3.14) {} // 调用多种写法 func(1); // b10, c3.14 func(1, 20); // c3.14 func(1, 20, 9.9); // 错误默认参数不能靠左 // void func(int a 10, int b) // 编译报错注意声明和定义只能一处写默认值推荐写在 .h 声明里。六、函数重载 Overload同一作用域函数名相同参数列表不同个数/类型/顺序编译器自动匹配对应函数。返回值不能作为重载区分依据。// 重载1 int calc(int a) { return a; } // 重载2 int calc(int a, int b) { return a b; } // 重载3 double calc(double a) { return a * 2; } calc(10); // 调用重载1 calc(1, 2); // 调用重载2 calc(2.5); // 调用重载3Qt 中大量使用重载按钮点击、控件构造。七、特殊函数类内成员函数1. 构造函数 Constructor函数名类名无返回值可重载。创建对象自动调用用于初始化成员变量。class Person { public: Person() { // 无参构造 age 0; } Person(int a) { // 有参构造重载 age a; } private: int age; }; Person p1; // 调用无参构造 Person p2(18); // 调用有参构造2. 析构函数 Destructor ~类名()如~MainWindow()波浪号~类名无参数、无返回、只能一个。对象销毁时自动调用释放堆内存、资源、句柄。class MainWindow { public: MainWindow(); ~MainWindow(); // 析构 };3. 常成员函数 const函数末尾加 const函数内不能修改成员变量只能读取。class Test { public: int getNum() const { // num 10; // 报错 return num; } private: int num 5; };4. 静态成员函数 static属于类不属于单个对象只能访问静态成员没有 this 指针。class Math { public: static int max(int a, int b) { return a b ? a : b; } }; // 直接类名调用不用创建对象 Math::max(3, 9);八、内联函数 inline普通函数调用有压栈跳转开销inline 提示编译器将函数代码直接嵌入调用处省去调用开销。适用代码很短1~5行、频繁调用的函数。inline int square(int x) { return x * x; }模板函数默认隐式 inline必须写在头文件。九、模板函数 template通用函数适配任意数据类型解决重复写 int/double/string 同款逻辑。templatetypename T T add(T a, T b) { return a b; } addint(1, 2); // 返回 3 adddouble(1.1, 2.2); // 返回 3.3强制放 .h 头文件编译器需要完整定义才能实例化。十、Lambda 匿名函数 C11不用定义函数名临时写一段逻辑常用于 Qt 信号槽、排序、遍历。auto func [](int x) - int { return x * 2; }; std::cout func(5); // 输出 10捕获列表 [][] 值捕获、[] 引用捕获外部变量。十一、函数递归函数内部自己调用自己必须有终止条件否则死循环栈溢出。// 阶乘 int fact(int n) { if (n 1) return 1; // 终止条件 return n * fact(n - 1); }十二、返回值补充1. void无返回可写 return; 提前退出2. 引用返回 int可以作为左值修改原变量3. 指针返回 int*返回堆地址记得外部释放4. 函数不能返回局部普通变量的引用/指针局部变量销毁悬空引用十三、常见易错点1. 函数声明加分号定义不能加分号2. 模板、inline 放头文件普通实现放 .cpp3. 重载只看参数返回值不算区分条件4. 默认参数从右往左写5. 传大型对象优先 const减少拷贝6. 析构函数不要手动调用对象销毁自动执行

相关新闻

C++20三向比较运算符实战指南:简化自定义类型比较逻辑

C++20三向比较运算符实战指南:简化自定义类型比较逻辑

1. 项目概述&#xff1a;为什么我们需要三向比较运算符&#xff1f;如果你写过C&#xff0c;尤其是写过自定义类型的比较逻辑&#xff0c;那你一定对重载operator<、operator这些函数感到熟悉又头疼。熟悉是因为这是基本功&#xff0c;头疼是因为太容易写错。你得小心翼翼地…

2026/11/12 6:39:36 阅读更多 →
三星 Galaxy Z Fold 8 发布:轻薄体验、设计升级,AI 功能待提升!

三星 Galaxy Z Fold 8 发布:轻薄体验、设计升级,AI 功能待提升!

三星 Galaxy Z Fold 8&#xff1a;全新折叠屏手机体验三星于 2026 年 7 月在伦敦的 Unpacked 活动上发布了多款新产品&#xff0c;其中全新的宽屏 Galaxy Z Fold 8备受期待。起初&#xff0c;看到泄露照片时&#xff0c;因其护照大小的外形在 2026 年并不常见&#xff0c;对其拿…

2026/11/12 14:58:40 阅读更多 →
如何做一次AI工作流诊断?6个问题找出系统真正卡点(附模板)

如何做一次AI工作流诊断?6个问题找出系统真正卡点(附模板)

一句话摘要&#xff1a;用Identity、Orchestration、Context、Gate、Recovery、Evolution六个维度&#xff0c;在30分钟内定位AI工作流的主要故障&#xff0c;并输出一张可验收的诊断结论卡。这是“一人公司AI内容生产系统”48篇系列的第14篇。 适合已经筛出真实求助&#xff0…

2026/11/6 13:40:42 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年&#xff0c;我大部分时间都在跟浏览器标签页打交道&#xff0c;直到第一次把桌面应用跑起来&#xff0c;才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词&#xff0c;最开始是在某段时间频繁出现在同事的讨论里&#xff0c;一个用HTML…

2026/11/13 5:13:25 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介&#xff1a;亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档&#xff0c;主要面向智能锁安装人员、终端用户及售后维护者&#xff0c;帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件&#xff0c;大小4.37MB&#xff0c;内容结构清晰&#xff…

2026/11/13 5:13:25 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统&#xff0c;整车要求空载跑到8m/s&#xff0c;电机转速已经拉到额定点&#xff0c;驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令&#xff0c;转速纹丝不动&#xff0c;三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/13 5:13:25 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年&#xff0c;用它写过嵌入式驱动、做过游戏服务端&#xff0c;也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词&#xff0c;我其实挺感慨的——这门语言的难点从来不是语法多&#xff0c;而是知识点之间的耦合太深…

2026/11/12 18:22:26 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介&#xff1a;亚太天能T109滑盖智能锁产品说明书以PDF格式发布&#xff0c;适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开&#xff0c;先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能&#xff0c;再给出完整安装步骤&…

2026/11/12 18:22:25 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历&#xff1a;翻开源码注释、论文摘要或者一份专业报告&#xff0c;每个字都认识&#xff0c;连在一起却像天书。想找人聊聊&#xff0c;身边要么没人懂&#xff0c;要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型&#xff0c;几秒钟之后&a…

2026/11/13 5:13:25 阅读更多 →

日新闻

周新闻

月新闻