C++ 初阶必学:namespace 命名空间,缺省参数,函数重载,引用的概念与定义。

张开发
2026/4/16 22:57:26 15 分钟阅读

分享文章

C++ 初阶必学:namespace 命名空间,缺省参数,函数重载,引用的概念与定义。
namespace思路讲解一句话namespace 就是给代码「加个文件夹」防止名字撞车。举个生活例子你们班有个叫「张三」的同学隔壁班也有个「张三」直接喊「张三」大家都不知道你喊谁但如果说一班的张三、二班的张三就完全不会混淆。代码实现#define _CRT_SECURE_NO_WARNINGS 1 #include iostream // 必须引入头文件 using namespace std; // 展开std命名空间简化写法 // 语法namespace 命名空间名 { 成员(变量/函数/类等) } namespace MySpace { // 命名空间内的成员 int my_rand 10; // 可以和全局的rand同名不会冲突 } // 全局作用域的rand和命名空间内的完全独立 int my_rand 20; int main() { // 访问命名空间成员必须用 命名空间名::成员 作用域解析符:: cout 命名空间内的rand: MySpace::my_rand endl; // 输出10 cout 全局的rand: my_rand endl; // 输出20 cout 你好世界 endl; return 0; }注意#includeiostream是C的头文件using namespace std是展开std命名的空间其中countendl在std空间里面。缺省参数思路讲解缺省参数也叫默认参数就是你在声明或定义函数时给函数的参数指定一个默认值。核心逻辑调用函数时如果你传了实参就用你传的那个值。如果你没传实参编译器就自动用那个预设的默认值。代码实现#includeiostream using namespace std; void Func1(int a 1, int b 2, int c 3) { cout Func1: a b c endl; } void Func2(int a, int b 20, int c 30) { cout Func2: a b c endl; } int main() { cout 全缺省参数 endl; Func1(); Func1(2); Func1(2, 3); Func1(2, 3, 4); cout 半缺省参数 endl; Func2(1); Func2(1, 2); Func2(1, 2, 3); return 0; }函数重载思路讲解C 允许在同一个作用域里定义多个「名字完全相同」的函数但要求它们的「形参列表」不一样参数个数不同 / 类型不同 / 顺序不同。这是 C 区别于 C 语言的核心特性之一C 语言不支持同名函数C 支持靠的就是函数重载代码实现int add(int a, int b) { return a b; } double add(double a, double b) { return a b; } int main() { cout add(1, 2) add(1, 2) endl; cout add(1.1, 2.2) add(1.1, 2.2) endl; return 0; }引用的概念与定义思路讲解引用不是新定义一个变量而是给已存在的变量取了一个别名。编译器不会为引用变量开辟独立的内存空间它和原变量共用同一块内存。代码实现#define _CRT_SECURE_NO_WARNINGS 1 #includeiostream using namespace std; //int main() //{ // int a 10; // int b a; // // // cout a endl; // cout b endl; // b 20; // cout a endl; // return 0; //} //void swap(int x, int y) //{ // int tmp x; // x y; // y tmp; //} // //int main() //{ // int x 1; // int y 2; // swap(x, y); // cout x endl; // cout y endl; // return 0; //} //typedef struct ListNode //{ // int val; // struct ListNode* next; //}LTNode,*PNode; // ////ListNode** PNode* LTNode** //void ListPushBack(PNode phead, int x) //{ // PNode newnode (PNode)malloc(sizeof(LTNode)); // newnode-val x; // newnode-next NULL; // if (phead NULL) { // phead newnode; // } // else { // // 遍历到尾节点插入新节点 // PNode cur phead; // while (cur-next) cur cur-next; // cur-next newnode; // } //} //// 传值返回返回临时变量无法修改原数组元素 //int SLAt(SL sl, int i) { // assert(i sl.size); // return sl.a[i]; //} // //// 传引用返回返回原元素的引用可直接修改 //int SLAt(SL sl, int i) { // assert(i sl.size); // return sl.a[i]; //} // 用法传引用返回可以直接赋值 //SLAt(sl, i) 1; // 直接修改原数组第i个元素 //错误引用 //int func() { // int ret 0; // 局部变量函数结束后内存销毁 // // ... // return ret; // 返回局部变量的引用本质是野引用 //}不能返回引用值 // //int main() { // int x func(); // x是ret的别名但ret的内存已经被销毁 // cout x endl; // 结果不可控可能是随机值程序崩溃 // return 0; //} //struct A { // int arr[1000]; // 大数组传值拷贝成本极高 //}; // //// 传引用零拷贝直接操作原对象 //void func(A aa) { // // 直接修改原对象 //}

更多文章