)
目录一.C的简单介绍1. 核心特性2. 应用领域3. 优势4. 发展现状二.C的输入输出流三.C的namespace1.namespace的定义2.namespace的使用四.函数重载1..函数重载的理解2.函数重载的实例一.C的简单介绍C 是一种高效、通用的编程语言由Bjarne Stroustrup于 1980 年代在贝尔实验室开发作为 C 语言的扩展。它在 C 语言的基础上增加了面向对象编程OOP和泛型编程的支持同时保持了 C 的高性能和底层控制能力。C 广泛应用于系统开发、游戏引擎、金融科技等领域是现代软件开发的重要工具之一。核心要点C 兼具高性能与底层控制能力广泛用于系统开发、游戏引擎及金融科技。1. 核心特性C 的核心优势在于其多范式编程能力。它不仅支持传统的 过程式编程还引入了面向对象编程OOP允许开发者使用类、继承、多态和封装来构建更模块化、可维护的代码。此外C 的泛型编程模板 机制使得开发者可以编写高度通用的代码如标准模板库STL中的各种数据结构和算法。在内存管理方面C 既支持手动管理如new和delete也提供了智能指针如shared_ptr和unique_ptr帮助减少内存泄漏的风险。同时C 具备强大的 类型系统和 运算符重载使得开发者可以更灵活地定义自定义数据类型的行为。2. 应用领域C 的高性能和底层控制能力使其成为许多关键领域的首选语言系统编程操作系统如 Windows、Linux 内核模块、设备驱动程序等。游戏开发许多大型游戏引擎如 Unreal Engine使用 C 实现以优化性能。嵌入式系统物联网IoT、实时操作系统RTOS等资源受限环境。金融与高频交易低延迟交易系统依赖 C 的高效执行。科学计算与高性能计算HPC数值模拟、物理引擎等计算密集型任务。3. 优势C 的主要优势包括高性能编译型语言直接生成机器码运行效率接近 C。灵活性支持多种编程范式适应不同开发需求。兼容 C可以无缝集成 C 语言代码和库适合混合编程。丰富的标准库STL 提供了大量现成的数据结构和算法提高开发效率。跨平台支持可在 Windows、Linux、macOS 等多种操作系统上运行。4. 发展现状C 仍在持续发展现代标准如C11、C14、C17、C20引入了许多新特性例如Lambda 表达式、自动类型推导auto、并发编程支持线程库等使代码更加简洁和安全。总结C 凭借其高性能、多范式支持和广泛的应用场景成为工业级软件开发的核心语言之一尤其适合对效率、灵活性和底层控制有较高要求的项目。二.C的输入输出流•iostream是 Input Output Stream 的缩写是标准的输入、输出流库定义了标准的输入、输出对象。•std::cin是 istream 类的对象它主要面向窄字符narrow characters (of type char)的标准输入流。•std::cout是 ostream 类的对象它主要面向窄字符的标准输出流。•std::endlendl即end line也是换行的意思是一个函数流插入输出时相当于插入一个换行字符加刷新缓冲区。•是流插入运算符是流提取运算符。C语言还用这两个运算符做位运算左移/右移。注C也支持连续输入如输出#includeiostream using namespace std; int main() { // 定义并初始化三个整型变量 int a 1, b 2, c 3; // 依次输出 a、b、c 的值用空格分隔 cout a b c endl; // 从键盘依次读入三个整数存入 a、b、c cin a b c; // 输出读入后的新值 cout a b c endl; return 0; // 程序正常结束返回 0 }三.C的namespace1.namespace的定义定义命名空间需要使用到namespace关键字后面跟命名空间的名字然后接一对{}即可{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等。•namespace本质是定义出一个域这个域跟全局域各自独立不同的域可以定义同名变量所以下面的rand不在冲突了。•C中域有函数局部域全局域命名空间域类域域影响的是编译时语法查找一个变量/函数/类型出处(声明或定义)的逻辑所有有了域隔离名字冲突就解决了。局部域和全局域除了会影响编译查找逻辑还会使用到变量的生命周期命名空间域和类域不影响变量生命周期。•namespace只能定义在全局当然它还可以嵌套定义。•项目工程中多文件中定义的同名namespace会认为是一个namespace不会冲突。C标准库都放在一个叫std(standard)的命名空间中。2.namespace的使用编译查找一个变量的声明/定义时默认只会在局部或者全局查找不会到命名空间里面去查找。所以下面程序会编译报错。所以我们要使用命名空间中定义的变量/函数有三种方式使用命名空间项目推荐用①指定访问和②using展开成员③全部展开冲突风险大仅限小练习。①指定命名空间访问项目中推荐这种方式。②using将命名空间中某个成员展开项目中经常访问的不存在冲突的成员推荐这种方式。③展开命名空间中全部成员项目不推荐冲突风险很大日常小练习程序为了方便推荐使用。①指定命名空间访问#includeiostream using namespace std; namespace kb // 自定义命名空间 kb { int a 1; // 命名空间中的整型变量 double b 2; // 命名空间中的双精度变量 char c 65; // ASCII 值 65 对应字符 A } int main() { int a 11, b 22, c 33; // 主函数内定义同名局部变量 // 通过 kb:: 作用域限定符访问命名空间中的变量 cout kb::a kb::b kb::c endl; // 此处访问的是主函数内的局部变量 cout a b c endl; return 0; }②using将命名空间中某个成员展开#includeiostream using namespace std; namespace kb { int a 1; double b 2; char c 65; // ASCII 值 65 对应字符 A } using kb::c; // 只引入命名空间 kb 中的变量 c int main() { int a 11, b 22; // 定义局部变量 a、b // 此处 c 使用 using 引入的 kb::c字符 A cout a b c endl; // 将字符 A 转为 int 再 1结果为 66 cout int(c) 1 endl; //cout a b c endl; return 0; }③展开命名空间中全部成员#includeiostream using namespace std; namespace kb { int a 1; double b 2; char c 65; // ASCII 值 65 对应字符 A } using namespace kb; // 一次性引入 kb 中的所有名字 int main() { int a 11, b 22, c 33; // 局部变量会覆盖命名空间的同名变量 // 此时输出的是局部变量 a、b、c cout a b c endl; //cout a b c endl return 0; }四.函数重载1..函数重载的理解C支持在同一作用域中出现同名函数但是要求这些同名函数的形参不同可以是参数个数不同或者类型不同。这样C函数调用就表现出了多态行为使用更灵活。C语言是不支持同一作用域中出现同名函数的。通俗理解就是我们举餐厅厅点菜的例子来理解。假设餐厅里有不同的菜品制作方法就像C中的同名函数。比如“制作沙拉”这个操作有“制作水果沙拉”和“制作蔬菜沙拉”。它们就相当于C中同名但形参不同的函数“水果沙拉”和“蔬菜沙拉”就是不同的“形参”这里可以把食材类型看作形参。虽然都是“制作沙拉”这个操作同名函数但根据传入的不同食材形参会有不同的制作过程和结果这就体现了多态行为。而在C语言中就像餐厅里每种菜品制作方法都是唯一的不允许有相同名字的不同制作方法没有这种灵活的多态机制。例如如果有一个“制作红烧肉”的方法就不能再有另一个也叫“制作红烧肉”但制作方式不同的方法了。2.函数重载的实例C函数重载主要有以下几种不同类型①参数个数不同②参数类型不同③参数顺序不同#includeiostream using namespace std; int Add(int a, double b) // 形参顺序int 在前、double 在后 { return a b; } // 参数的顺序不同double 在前、int 在后 int Add( double b,int a) { return a b; } // 参数的类型不同两个 double 参数 double Add(double a, double b) { return a b; } // 参数的个数不同三个 int 参数 double Add(int a, int b, int c) { return a b c; }void test() { // 调用 Add(2, 3.5)匹配 Add(int, double) cout Add(2, 3.5) endl; // 调用 Add(2.5, 3)匹配 Add(double, int)参数顺序不同 cout Add(2.5, 3) endl; // 调用 Add(2.0, 3.0)匹配 Add(double, double)参数类型不同 cout Add(2.0, 3.0) endl; // 调用 Add(2, 3, 4)匹配 Add(int, int, int)参数个数不同 cout Add(2, 3, 4) endl; } int main() { test(); // 调用 test 函数演示函数重载 return 0; }以上代码展示了函数重载的精妙应用。代码中定义了多个名为 Add 的函数它们分别在参数顺序、类型和个数上存在差异 。从参数顺序看有 int Add(int a, double b) 和 int Add(double b, int a) 类型方面 double Add(double a, double b) 与其他 Add 函数形成区分 个数上 double Add(int a, int b, int c) 独树一帜。在 test 函数中对这些重载函数进行调用如 Add(2, 3.5) 等编译器会依据参数的实际情况精准匹配并调用对应的 Add 函数版本输出预期结果展现C 函数重载机制的灵活与强大。在以上情况下函数名相同但通过不同的参数特征来区分不同的函数从而实现函数重载。函数重载核心同一作用域下同名函数靠参数个数/类型/顺序不同来区分C 语言不支持。