C++基础入门详解(一)

news2024/10/3 2:17:19

在这里插入图片描述

文章目录

  • 前言
  • 命名空间
    • 展开命名空间
    • 使用C++官方命名空间中的输入输出
      • IO流输入输出的使用方法
  • 缺省参数
    • 半缺省
  • 函数重载

“你总以为机会无限,所以不珍惜眼前人”

前言

提到C++,大部分人都想到的是复杂的语法和大量的规则,相对于java和python等语言,需要程序员的要求更高,但C++的优势也是显而易见的,效率高、对细节的控制能力强,应用更广、性能更优等等,这篇文章,我们就从C语言开始,讨论C++的基础语法。

命名空间

C++这门语言被发明出来,其实就是为了解决C语言的缺陷与不足。在C语言中,有个很大的问题就是变量的命名冲突问题。其中包括与自己定义的变量与库中定义变量之间的命名冲突问题和自己定义的变量之间的命名冲突问题。这个问题在C++中得以很好的解决。
于是在C++中定义了一个命名空间的概念,命名空间是一种将全局作用域分割为更小、更具体的区域,避免命名冲突的方法。它允许在代码中定义一个区域使得其中定义的所有变量、函数、类等名字不会与其他命名空间中定义的名字冲突。命名空间使用关键字namespace来定义,里面的域作用限定符为:::

下面举例子来演示如何在C++中使用命空间:

// 定义命名空间
namespace zyb
{
	int rand = 0;
}
int main() {
    // 使用命名空间中的变量
    printf("%d\n",zyb::rand);
    return 0;
}

其中,zyb是自己定义的命名空间的名字,默认情况下,编译器编译代码不会去命名空间限定的区域去找是否有定义的变量和函数、类等等,只有加上 命名空间名::命名空间中的变量名,才能使用命名空间中限定的变量。

展开命名空间

在使用命名空间的时候,如果经常要使用命名空间中的变量、类等,经常使用限定符指定命名空间就很麻烦。那么,在确定不会出现命名冲突的工程或者自己练习的情况下,可以直接展开命名空间,展开命名空间后,命名空间里的变量、类等都可以直接使用,不需要再使用限定符来指定命名空间。

展开命名空间格式:

using namespace 命名空间名;

使用C++官方命名空间中的输入输出

相信大家在看C++代码的时候,一定见过这样的代码来表示输入输出:

std::cout << "hello wrld";
std::cin >> a;

其中 << 和 >> 是头文件 < iostream > 中的一部分,分别被称为流插入运算符和流提取运算符。而 cout 和 cin 是C++中的IO流对象,cout 可以将数据输出到控制台或者文件中,cin 可以将控制台或文件中读入数据。这两个 IO 流对象都是定义在< iostream > 中,标准命名空间 std 中的组成部分,加上 std:: 修饰后,编译器就可以找到这个对象并使用。

那为什么看到好多代码中都没有使用 std:: 呢?
既然他们是官方命名空间中定义的,那么就可以在日常练习使用中提前展开它。

using namespace std;

但是在工程项目中尽量不要展开std,易发生命名冲突。

当然,在大项目中,为了方便,也可以使用指定展开的方式,即只将 std 中的 cout cin 等展开以供使用。

using std::cout;
using std::cin;

这样,既避免了全部展开std 全部展开可能出现的命名冲突问题,又方便了书写。

IO流输入输出的使用方法

当展开官方的命名空间后,使用 cout 和 cin 就可以简单的实现输入和输出。

#include <iostream>
using namespace std;
int main() {
   int num;
   cout << "请输入一个整数:" << endl;
   cin >> num;
   cout << "您输入的数值是:" << num << endl;
   return 0;
}

endl 是换行的意思,相当于C语言中的 ‘\n’ 。
呢么整个输入输出的规则为:
cout << 变量名或数值 :用于输出变量或数值。
cin >> 变量名 :用于从控制台接收输入,并将值存储到变量中。

缺省参数

缺省参数也是C++相对于C独有的。缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。

void Func(int a = 0)
{
	cout << a << endl;
}
int main()
{
	Func();   // 没有传参时,使用参数的默认值
	Func(10);  // 传参时,使用指定的实参
	return 0;
}

半缺省

即函数定义中有多个参数,有的参数缺省,有的不缺省。
半缺省参数在使用的时候有一些规则:

  • 半缺省参数必须从右往左依次来给出,不能间隔着给
  • 缺省参数不能在函数声明和定义中同时出现

半缺省参数如果从右往左给,就不会出现歧义。例如,当传一个参数的时候,如果从右向左开始有半缺省参数,那么最左边的未缺省参数肯定会接收到传进来的参数,这样不会出现到底传给谁的问题。

函数如果声明和定义分离,缺省参数如果在两个地方都有,则可能会出现两个参数初值不相同的情况。因此C++语法规定:定义时不出现缺省参数,只在声明时给出。

函数重载

函数重载在C++语法中规定:两个函数名可以相同,并且在返回值相同的情况下,参数不同。参数不同包括:参数类型不同、参数个数不同、参数顺序不同等等(不同使用缺省参数实现函数重载,可能会出现歧义的情况)。

C++中函数重载可以实现的原理其实是在编译器链接的过程中,不同参数定义的函数名修饰规则不同。

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

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

相关文章

基于YOLOv8模型的绵羊目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要&#xff1a;基于YOLOv8模型的绵羊目标检测系统可用于日常生活中检测与定位车辆目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的目标检测&#xff0c;另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标检测算法训练数据集…

基于simulink的单相光伏系统并网储能控制仿真

本仿真涉及到&#xff1a;基于电导增量法的最佳功率点跟踪算法、蓄电池恒流_恒压充电算法、光伏逆变器并网算法、双向&#xff08;同步&#xff09;DCDC电路设计等知识。 辐照度变化曲线&#xff1a; 模拟仿真&#xff0c;低辐照度情况&#xff0c;蓄电池与光伏逆变器共同向…

软件项目管理实践指南:有效规划、执行和控制

软件项目管理是使软件产品、应用程序和系统成功交付的重要规程。它有助于确保软件在预算内按时开发&#xff0c;同时满足客户的质量和功能需求。 软件项目管理是管理软件项目生命周期的一种有组织的方法&#xff0c;包括计划、开发、发布、维护和支持。它是在满足客户需求的同时…

python:绘制回归预测结果真实值和预测值之间的散点密度图

作者:CSDN @ _养乐多_ 对博客《python:使用卷积神经网络(CNN)进行回归预测》中的,回归预测结果真实值和预测值之间的散点密度图升级了一下。 如下图所示, 文章目录 一、完整代码二、参考一、完整代码 def plot(y_test, y_test_predict, method):d

SAP MM学习笔记34 - 请求书照合中的支付保留(发票冻结)

上次学习了 请求书照合中 如何修改 带勘定设定Category的发票&#xff0c;并举了 K&#xff1a;原价Center 的例子。 SAP MM学习笔记33 - 请求书照合中修改 带勘定设定Category&#xff08;科目分配&#xff09;的发票_东京老树根的博客-CSDN博客 日月如梭&#xff0c;倏忽之间…

JMeter性能测试,完整入门篇

1. Jmeter简介 Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件。相比Loadrunner而言&#xff0c;JMeter小巧轻便且免费&#xff0c;逐渐成为了主流的性能测试工具&#xff0c;是每个测试人员都必须要掌握的工具之一。 本文为JMeter性能测试完整入门篇&…

【【萌新的SOC学习之AXI DMA环路测试介绍】】

萌新的SOC学习之AXI DMA环路测试介绍 AXI DMA环路测试 DMA(Direct Memory Access&#xff0c;直接存储器访问)是计算机科学中的一种内存访问技术。它允许某些计算机内部的硬件子系统可以独立地直接读写系统内存&#xff0c;而不需中央处理器&#xff08;CPU&#xff09;介入处…

【atoi函数详解】

文章目录 一. 什么是atoi函数二. 模拟实现函数atoi三. 总结atoi 一. 什么是atoi函数 atoi函数是将常量字符串转化为整数 int atoi(const char str);* 注意&#xff1a;该函数的返回值为int&#xff0c;所以不能超过int范围&#xff0c;如果数字很大超过就会截断&#xff0c;返…

手搭手Mybatis-Plus数据迁移至TDSQL

环境介绍 技术栈 springbootmybatis-plusdruidbaomidoumysqloracle 软件 版本 mysql 8 IDEA IntelliJ IDEA 2022.2.1 JDK 1.8 Spring Boot 2.7.13 mybatis 2.3.1 Navicat测试连接TDSQL 开启访问外网 IDEA环境搭建 pom.xml所需依赖 <dependencies><dep…

计算机毕业设计选什么题目好?springboot 试题库管理系统

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

element ui el-table表格复选框,弹框关闭取消打勾选择

//弹框表格复选框清空 this.$nextTick(()>{this.$refs.table.clearSelection();})<el-table ref"table" v-loading"crud.loading" :header-cell-style"{ color: #FFF, background: #333 }":cell-style"{ color: #FFF, background: #3…

【Java 进阶篇】JavaScript 日期和时间详解

JavaScript是一种强大的编程语言&#xff0c;它不仅可以用于处理文本和数字&#xff0c;还可以处理日期和时间数据。在本篇博客中&#xff0c;我们将深入探讨JavaScript中日期和时间的处理方式。不管你是在网页开发、移动应用开发&#xff0c;还是服务端开发&#xff0c;处理日…

Linux 查看CPU架构及内核版本

涉及arch命令和/proc/version文件 1 查看CPU架构 有些软件的安装需要和CPU架构相匹配&#xff0c;如JDK等等&#xff0c;所以需要确定主机的CPU架构类型。可使用命令arch查看Linux系统的CPU架构&#xff0c;如下&#xff1a; arch 12 查看内核版本 文件/proc/version中包含系…

四、RIP动态路由实验

拓扑图&#xff1a; 基本ip的配置已经配置好了&#xff0c;接下来对两台路由器配置rip协议&#xff0c;两台PC进行跨网段通讯 RIPv1版本只能识别ABC的大类网段&#xff0c;不能区分子网掩码&#xff0c;v2版本可以识别子网掩码 首先进入R1&#xff0c;进入rip&#xff0c;宣告…

来入门一下C语言打印Hello World

&#x1f4da;目录 安装程序官网下载软件启动程序运行代码解决乱码 安装环境IntelliJ Clion 安装程序 IntelliJ ClionVisual Studio…等 由于使用的主开发软件是IntelliJ的产品&#xff0c;所以这一次也使用旗下的IntelliJ Clion当做C的开发编程&#xff0c;当然更推荐你们使用…

App自动化测试环境搭建

目录 1、java jdk安装 2、node.js安装 3、安装模拟器安装 4、Android SDK 安装 5、Appium-Server安装 6、appium客户端安装  7、Appium-Python-Client安装 只做记录和注意点&#xff0c;详细内容不做解释 环境&#xff1a;winappium夜神模拟器python 需要用到的工具&a…

树和二叉树 | 一些遇到的小问题

1. TreeNode<T> &a TreeNode<T> &a是一个引用&#xff0c;指向类型为T的TreeNode节点。这个引用可以用来修改或访问该节点的值或属性。 2. *BiTree是什么意思&#xff1a; typedef struct BiTNode{ char data;struct BiTNode* lchild, * rchild; }BiT…

8中间件-Redis、MQ---基本

中间件&#xff08;Middleware&#xff09;是指位于客户端和服务器端之间的软件&#xff0c;用于处理请求和响应&#xff0c;以及提供额外的功能和服务。中间件可以用于各种不同的应用程序&#xff0c;例如Web应用程序、消息传递系统、数据库管理系统等。 在Web应用程序中&…

pycharm远程调试运行程序出现No such file or directory:解决办法

太离谱了&#xff01;&#xff01;&#xff01;&#xff01; 首先还是配置这里 然后重点来了&#xff0c;root path这里填上代码文件夹路径 然后mapping这里就不要再加了&#xff01;&#xff01;&#xff01;因为这个会和上面的root path拼在一起&#xff01;&#xff01;&am…

C++学习day7

一、思维导图 二、作业试编程&#xff1a; 封装一个学生的类&#xff0c;定义一个学生这样类的vector容器&#xff0c;里面存放学生对象&#xff08;至少3个)再把该容器中的对象&#xff0c;保存到文件中。 封装一个学生的类&#xff0c;定义一个学生这样类的载体容器&#xff…