【C++】入门基础(命名空间、缺省参数、函数重载)

目录

一.命名空间:namespace

1.namespace的价值

2.namespace的定义

3.namespace的使用方法

3.1 域解析运算符::

3.2 using展开

3.3 using+域解析运算符

二.输入输出

三.缺省参数

四.函数重载

1.参数类型不同

2.参数个数不同

3.参数顺序不同


一.命名空间:namespace

1.namespace的价值

在C/C++中,存在大量变量、函数,它们的名称都存在在全局作用域中,可能会导致很多冲突。使用命名空间的目的就是对标识符的名称进行本地化,避免命名的冲突。

2.namespace的定义

使用namespace关键字定义一个域,这个域跟全局域各自独立,不同的域中可以定义相同名字的变量,这就避免的命名的冲突。其中C++标准库都放在一个叫std(standard)的命名空间中。例如以下代码:同一个名的变量rand在不同域中表现不同的内容

TIPs:cout<<  <<endl相当于C语言中的printf(" \n");

#include<iostream>
#include<stdlib.h>
using namespace std;namespace zyh
{int rand = 10;
}int main()
{//默认是std::rand//标准库中rand是一个地址cout << rand << endl;//命名空间zyh中rand是一个Int变量cout << zyh::rand << endl;return 0;
}

 ​​​​

C++中域有局部域,全局域,命名空间域,类域;局部域、全局域会影响编译查找逻辑和变量的生命周期,但命名空间域和类域不会影响变量的生命周期。

namespce只能定义在全局中,并且支持嵌套定义。项目工程文件中多文件中定义的同名namespace会被认为是一个namespace,自动合并到一起。

//嵌套定义
namespace zyh
{int rand = 10;namespace zyh2{int rand = 20;}
}

3.namespace的使用方法

3.1 域解析运算符::

在变量名前加上(命名空间名) + :: (域解析运算符)就可以访问指定命名空间域中的变量了,例如:

namespace zyh
{int a = 10;int b = 20;
}int main()
{//访问命名空间域zyh中的a和bcout<<zyh::a<<endl;cout<<zyh::b<<endl;return 0;
}

3.2 using展开

using + (命名空间名);直接将命名空间内的所有成员全部展开,也就是说展开后无需加域解析运算符就可访问,但这种方式风险极大,不推荐在项目中使用,例如:

namespace zyh
{int a = 10;int b = 20;
}//直接使用using展开命名空间zyh
using namespce zyh;
int main()
{/展开后就能直接访问命名空间域zyh中的a和bcout<<a<<endl;cout<<b<<endl;return 0;
}

3.3 using+域解析运算符

这就是前两者的结合版,将命名空间域中的某个成员进行展开使用,这种方式是比较合理的,也经常使用到,例如cout和endl是std命名空间中的输出和换行,由于经常要用到,因此可以在程序最开头直接将这两个成员进行展开,此后方便使用。

using std::cout;
using std::endl;int main()
{int a = 10;cout<<a<<endl;
}

二.输入输出

C++的输入输出相较于C语言就舒服多了,C++不需要自己手动输入格式,它能自动识别变量的类型(本质是通过函数重载实现的)并进行输入输出。

  1. <iostream>是input,output stream的缩写,是标准输入、输出流库,定义了标准的输入、输出对象
  2. std::cin相当于scanf,配合流插入运算符>>,实现数据的输入
  3. std::cout相当于printf,配合流输出运算符<<,实现数据的输出
  4. std:endl相当于换行(此时可以这么理解)
using std::cout;
using std::endl;
using std::cin;
int main()
{int a;double b;char c;//不同类型的abc,cin和cout都能自动识别处理cin >> a;cin >> b;cin >> c;cout << a << "/" << b << "/" << c << endl;return 0;
}

三.缺省参数

有些地方缺省参数也叫做默认参数,它是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定的实参,则采用该形参的缺省值,否则就使用指定的实参。

全缺省就是全部形参都给缺省值,半缺省就是部分形参给缺省值。C++规定半缺省参数必须从右往左依次连续缺省,不能间隔跳跃给缺省值。原因很好理解,就是为了防止歧义,例如4个参数中只有第一个和最后一个有缺省值,那么若给的实参有3个,应该如何分配?为了应对这些情况,C++特意做出的规定。

函数声明和定义分离的时候,缺省参数不能在函数声明和定义中同时出现,否则就会出现歧义,规定必须函数声明给缺省值。

//全缺省
void func1(int a = 10, int b = 20, int c = 30)
{cout << a << "/" << b << "/" << c << endl;
}//半缺省
void func2(int a, int b = 0, int c = 0)
{cout << a << "/" << b << "/" << c << endl;
}int main()
{func1();func1(666);func1(1, 2, 3);func2(6);func2(6, 7, 8);return 0;
}

四.函数重载

C++支持在同一作用域下出现相同的函数名,区别在于这些同名函数的形参不同,这个不同,可以是参数个数,参数类型,或参数顺序。C语言是不支持同一作用域中出现同名函数的,这一改动就是为了方便使用,更加灵活。

1.参数类型不同

int Add(int a, int b)
{return a + b;
}double Add(double a, double b)
{return a + b;
}int main()
{cout << Add(3, 4) << endl;cout << Add(1.1, 2.2) << endl;return 0;
}

2.参数个数不同

int Add(int a, int b)
{return a + b;
}int Add(int a, int b, int c)
{return a + b + c;
}

3.参数顺序不同

实际上也就是参数类型不同

void f(int a, double b)
{cout << "f1" << endl;
}void f(double b, int a)
{cout << "f2" << endl;
}int main()
{f(1, 1.2);f(2.2, 4);return 0;
}

注意:返回值不能最为函数重载的条件,因为调用函数的时候无法区分,因此只能将参数的区别作为函数重载的依据 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/45865.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

APP专项测试之网络测试

背景 当前app网络环境比较复杂&#xff0c;越来越多的公共wifi&#xff0c;网络制式有2G、3G、4G网络&#xff0c;会对用户使用app造成一定影响&#xff1b;当前app使用场景多变&#xff0c;如进地铁、上公交、进电梯等&#xff0c;使得弱网测试显得尤为重要&#xff1b; 网络正…

链路追踪系列-02.演示zipkin

当本机启动docker es zipkinServer之后&#xff1a; 启动3个项目&#xff1a;先eureka-server&#xff0c;再 PaymentMain8001,… 浏览器打开&#xff1a;http://localhost:9001/consumer/payment/zipkin consumer代码 &#xff1a; provider: 此时查询es:

3-2 多层感知机的从零开始实现

import torch from torch import nn from d2l import torch as d2lbatch_size 256 # 批量大小为256 train_iter, test_iter d2l.load_data_fashion_mnist(batch_size) # load进来训练集和测试集初始化模型参数 回想一下&#xff0c;Fashion-MNIST中的每个图像由 28 28 784…

学习C++,应该循序渐进的看哪些书?

学习C是一个循序渐进的过程&#xff0c;需要根据自己的基础和目标来选择合适的书籍。以下是一个推荐的学习路径&#xff0c;包含了从入门到进阶的书籍&#xff1a; 1. 入门阶段 《C Primer Plus 第6版 中文版》 推荐理由&#xff1a;这本书同样适合C零基础的学习者&#xff0…

[CISCN2018]2ex

啊!好恶心的mips寄存器 好多IDA都查不到,这寄存器~! fuck! 但是这种寄存器一般的题都不难 这道题就是 我用平常的方法,没找到 左边函数一个一个点 看见这里0X3F base64 密文呢? 我giao 外面的txt文件里面 脚本 import base64 import string# 定义你的自定义字符集 st…

聊点基础---Java和.NET开发技术异同全方位分析

1. C#语言基础 1.1 C#语法概览 欢迎来到C#的世界&#xff01;对于刚从Java转过来的开发者来说&#xff0c;你会发现C#和Java有很多相似之处&#xff0c;但C#也有其独特的魅力和强大之处。让我们一起来探索C#的基本语法&#xff0c;并比较一下与Java的异同。 程序结构 C#程序…

美团收银Android一面凉经(2024)

美团收银Android一面凉经(2024) 笔者作为一名双非二本毕业7年老Android, 最近面试了不少公司, 目前已告一段落, 整理一下各家的面试问题, 打算陆续发布出来, 供有缘人参考。今天给大家带来的是《美团收银Android一面凉经(2024)》。 应聘岗位: 美团餐饮PaaS平台Android开发工程师…

【2-1:RPC设计】

RPC 1. 基础1.1 定义&特点1.2 具体实现框架1.3 应用场景2. RPC的关键技术点&一次调用rpc流程2.1 RPC流程流程两个网络模块如何连接的呢?其它特性RPC优势2.2 序列化技术序列化方式PRC如何选择序列化框架考虑因素2.3 应用层的通信协议-http2.3.1 基础概念大多数RPC大多自…

【C++ | 虚函数】虚函数详解 及 例子代码演示(包含虚函数使用、动态绑定、虚函数表、虚表指针)

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

Matlab-Simulink模型保存为图片的方法

有好多种办法将模型保存为图片&#xff0c;这里直接说经常用的 而且贴到Word文档中清晰、操作简单。 simulink自带有截图功能&#xff0c;这两种方法都可以保存模型图片。选择后直接就复制到截切板上了。直接去文档中粘贴就完事了。 这两个格式效果不太一样&#xff0c;第一种清…

JS登录页源码 —— 可一键复制抱走

前期回顾 https://blog.csdn.net/m0_57904695/article/details/139838176?spm1001.2014.3001.5501https://blog.csdn.net/m0_57904695/article/details/139838176?spm1001.2014.3001.5501 登录页预览效果 <!DOCTYPE html> <html lang"en"><head…

通信协议 | 一文玩转UART协议就够了

文章目录 协议基础1、UART简介2、UART特性3、UART协议帧3.1、起始位3.2、数据位3.3、奇偶校验位3.4、停止位 4、UART通信步骤 最详细的UART通讯协议分析Verilog代码实现UART接口模块驱动 协议基础 1、UART简介 UART&#xff08;Universal Asynchronous Receiver/Transmitter&…

制造业ERP源码 ERP系统源码 ERP小程序源码

制造业ERP源码 ERP系统源码 ERP小程序源码 资料&#xff1a; 委外工厂管理 客户列表 车间管理 供应商管理 账户管理 商品管理 仓库管理 职员管理 自取地址管理 司机管理 辅助资料 客户等级 供应商分类 客户分类 商品分类 支出类别管理 收入类别管…

uniapp使用多列布局显示图片,一行两列

完整代码&#xff1a; <script setup>const src "https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/shuijiao.jpg" </script><template><view class"content"><view class"img-list"><image :src"src…

KnoBo:医书学习知识,辅助图像分析,解决分布外性能下降和可解释性问题

KnoBo&#xff1a;从医书中学习知识&#xff0c;辅助图像分析&#xff0c;解决分布外性能下降问题 提出背景KnoBo 流程图KnoBo 详解问题构成结构先验瓶颈预测器参数先验 解法拆解逻辑链对比 CLIP、Med-CLIPCLIPMed-CLIPKnoBo 训练细节预训练过程OpenCLIP的微调 构建医学语料库文…

【经典面试题】是否形成有环链表

1.环形链表oj 2. oj解法 利用快慢指针&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/typedef struct ListNode ListNode; bool hasCycle(struct ListNode *head) {ListNode* slow head, *fast…

前端练习小项目——方向感应名片

前言&#xff1a;在学习完HTML和CSS之后&#xff0c;我们就可以开始做一些小项目了&#xff0c;本篇文章所讲的小项目为——方向感应名片 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客 在开始学习之前&#xff0c;先让我们看一…

Java中的代理机制

代理的概述 代理&#xff1a;给目标对象提供一个代理对象&#xff0c;并且由代理对象控制着对目标对象的引用&#xff08;跟多态一样&#xff09; mybatis、spring都运用了代理机制 跳过创建类的过程&#xff0c;直接产生对象 简单来说&#xff0c;我们使用代理对象来代替对…

【Python】日期和时间模块

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️Python】 文章目录 前言时间元组datetime 模块datetime类获取当前日期和时间 timedelta类日期和时间运算 strftime()方法格式化时间日期格式化符号 strptime()方法 Time 模块Time 模块内置函数Time 模…

编译适用于 Apple Silicon Macs 的 Chromium 教程

本教程将指导你如何在 Apple Silicon Macs 上编译 Chromium&#xff0c;包括所需的系统要求、工具安装、源码获取、环境配置、编译和运行步骤。 一、系统要求 Apple Silicon Mac&#xff08;如 M1、M2&#xff09;。安装 Xcode 和 macOS SDK&#xff08;通过 App Store 安装最…