【C++】C++ 入门 — 命名空间,输入输出,函数新特性

在这里插入图片描述

C++

  • 1 前言
  • 2 命名空间
    • 2.1 概念引入
    • 2.2 开始使用
    • 2.3 投入应用
  • 3 输入与输出
    • 3.1 基础知识
    • 3.2 开始使用
    • 3.3 注意局限
  • 4 函数新特性
    • 4.1 缺省参数
      • 4.1.1 开始使用
      • 4.1.2 注意事项
    • 4.2 函数重载
      • 4.2.1 开始使用
      • 4.2.2 如何实现
  • Thanks♪(・ω・)ノ谢谢阅读
  • 下一篇文章见!!!

1 前言

本文章是我对C++学习的开始,很荣幸与大家一同进步。
首先我先介绍一下C++,C++是上个世纪为了解决软件危机所创立 的一项面向对象的编程语言(OOP思想)。
1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一种新的程序语言。为了表达该语言与C语言的渊源关系,命名为C++。因此:C++是基于C语言而产生的,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计
在这里插入图片描述
根据今年一月TIOBE公布的排行榜,C++依然稳居前三,可见这是一款非常优秀的编程语言

2 命名空间

2.1 概念引入

在C语言中我们时常遇见这样的冲突:
在这里插入图片描述
重定义!!!总是不小心定义相同变量,多人操作的时候很难避免这个问题。
于是C++为了避免这类问题,引入了“命名空间”的概念;
使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的

2.2 开始使用

如活动定义一个命名空间呢?这里需要使用namespace关键字

namespace name
{// 命名空间中可以定义变量/函数/类型int a = 0;double add(double a,double b){return a + b;}struct node{int val ;int size;}}

并且可以做到嵌套定义:

namespace name1{namespace name2{//...}
}

注意
同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。

2.3 投入应用

使用命名空间主要有三种使用方法:
1 加命名空间名称及作用域限定符;
2 使用using将命名空间中某个成员引入;
3 使用using namespace 命名空间名称 引入.
来看第一种:

命名空间名称及作用域限定符

#include<iostream>
//定义两个命名空间
namespace name1 {int a = 0;
}
namespace name2 {int a = 0;
}int main() {
//使用 作用域限定符 ::name1::a = 1;name2::a = 1;return 0;
}

使用using将命名空间中某个成员引入

#include<iostream>
//定义两个命名空间
namespace name1 {int a = 0;int b = 0;
}
//只有引入的变量才可以省略 命名空间和 作用域符号;
using namespace name1::a;int main() {
//使用 作用域限定符 ::a = 1;name :: b = 2;return 0;
}

使用using namespace 命名空间名称 引入

#include<iostream>
//定义两个命名空间
namespace name1 {int a = 0;int b = 0;
}
//引入命名空间后,其中的变量/函数/结构体 
//可以直接使用
using namespace name1;int main() {a = 1;b = 2;return 0;
}

3 输入与输出

c++中的输入输出与C语言略有不同。来看样例

#include<iostream>
// std是C++标准库的命名空间名,C++将标准库的定义实现都放到这个命名空间中
using namespace std;
int main()
{cout<<"Hello world!!!"<<endl;return 0;
}

运行效果
在这里插入图片描述

3.1 基础知识

  1. 使用cout标准输出对象(控制台)和cin 标准输入对象(键盘)时,必须包含< iostream >头文件以及按命名空间使用方法使用std。
  2. cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包含头文件中。
  3. <<是流插入运算符,>>是流提取运算符。
  4. 使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动控制格式。C++的输入输出可以自动识别变量类型
  5. 实际上cout和cin分别是ostream和istream类型的对象,>>和<<也涉及运算符重载等知识,这些知识后续才会学习,所以这里只是简单学习如何使用。后面我们更深入的学习IO流用法及原理。

3.2 开始使用

我们来看样例:

#include<iostream>
// std是C++标准库的命名空间名,C++将标准库的定义实现都放到这个命名空间中
using namespace std;
int main()
{char a = 0;int b;float c = 0;cin >> a;//支持连续输入,并自动识别类型。cin >> b >> c;cout << "输出\n" << a << '\n' << b << '\n' << c << '\n' << endl;return 0;
}

运行效果:
在这里插入图片描述

这方面就比C语言的printf scanf等函数方便许多。

3.3 注意局限

大家也一定注意到了一点,c++中既然直接使用了变量名输出,那如何控制输出格式呢?答案是有办法实现的,就是比较复杂。所以我们直接使用C语言<stdio.h>中的printf函数即可,毕竟c++兼容绝大部分的C语言。

4 函数新特性

4.1 缺省参数

4.1.1 开始使用

缺省参数的概念十分好理解,就是在函数定义中加入参数的默认值,并且在没有传入对应参数时,使用默认值。
来看样例:

// 全缺省
using namespace std;void Func(int a = 10, int b = 20, int c = 30)
{cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl << endl;
}int main()
{//半缺省 Func(1, 2, 3) ;Func(1, 2);Func(1);//全缺省Func();return 0;
}

来看运行效果:
在这里插入图片描述

4.1.2 注意事项

  1. 一定注意缺省参数是从左向右传入参数,无法做到传入指定参数。
  2. 缺省参数不能在函数声明和定义中同时出现(如果声明与定义位置同时出现,恰巧两个位置提供的值不同,那编译器就无法确定到底该用那个缺省值。所以我们一般在声明中给入默认值,这样方便使用、检查错误等操作)
  3. 缺省值必须是常量或者全局变量
  4. C语言不支持(编译器不支持)

4.2 函数重载

4.2.1 开始使用

在C语言中我们无法实现同一个函数名返回不同类型值或者使用不同类型参数。
所以就导致简单的加和函数Add 如果要实现不同类型的加和不免会出现:
AddInt
AddFloat
AddChar
···
不仅繁琐,而且调用的时候也不方便。

在自然语言中,一个词可以有多重含义,人们可以通过上下文来判断该词真实的含义,即该词被重载
c++ 于是就引入了函数重载的概念。
来看样例:

#include<iostream>using namespace std;
int Add(int a = 0, int b = 0) {return a + b;
}
double Add(double a = 0.0, int b = 0) {return a + b;
}
int main() 
{cout << Add(1, 2) << endl;cout << Add(3.14, 2) << endl;return 0;
}

来看运行效果:
在这里插入图片描述

4.2.2 如何实现

那么这么强大的函数重载是如何实现的呢???
答案就在汇编代码中
在c++中,对于一个函数的储存与C语言不同,C++使用了更加具体命名方式(具体要看编译器);我个人非常喜欢g++的形式。上面两个函数分别为:
_Z3Addii
_Z3Adddi
目前我还没有能力深入讲解其中的道理。

Thanks♪(・ω・)ノ谢谢阅读

下一篇文章见!!!

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

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

相关文章

Python算法题集_接雨水

本文为Python算法题集之一的代码示例 题目42&#xff1a;接雨水 说明&#xff1a;给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1]…

银行数据仓库体系实践(11)--数据仓库开发管理系统及开发流程

数据仓库管理着整个银行或公司的数据&#xff0c;数据结构复杂&#xff0c;数据量庞大&#xff0c;任何一个数据字段的变化或错误都会引起数据错误&#xff0c;影响数据应用&#xff0c;同时业务的发展也带来系统不断升级&#xff0c;数据需求的不断增加&#xff0c;数据仓库需…

HBase入门:运行机制

文章目录 HBase 系统架构客户端ZooKeeper 服务器Master 主服务器Region 服务器 Region 服务器工作原理用户读写数据的过程缓存的刷新StoreFile合并 Store 的工作原理HLog 的工作原理 HBase 系统架构 HBase 的系统架构包括客户端、ZooKeeper 服务器、Master 主服务器、Region服…

Liunx基础-----------------------第十六章网站服务

一、概念 UI的转变&#xff1a;B/S框架 HYML&#xff1a;超文本标记语言 网页&#xff1a;使用HTML&#xff0c;PHP&#xff0c;JAVA语言格式书写的文件 主页&#xff1a;网页中呈现用户的第一个页面 网站&#xff1a;多个网页组合而成的一台网站服务器 URL&#xff1a;统…

【HarmonyOS应用开发】开发介绍 DevEco Studio安装与使用(一)

内容比较长&#xff0c;干货满满&#xff0c;全是实战操作内容&#xff0c;希望耐心观看&#xff0c;如果对你有所帮助&#xff0c;请点个赞&#xff01; 官方文档&#xff1a;https://developer.huawei.com/consumer/cn/training/course/slightMooc/C101667303102887820 访…

上位机图像处理和嵌入式模块部署(c/c++ opencv)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 opencv可以运行在多个平台上面&#xff0c;当然windows平台也不意外。目前来说&#xff0c;opencv使用已经非常方便了&#xff0c;如果不想自己编译…

【Godot4自学手册】第七节背景搭建

各位同学&#xff0c;今天是第七节&#xff0c;在本节我会学习如何使用TileMap来完成背景搭建。 一、添加TileMap结点 先做个介绍&#xff0c;TileMap是基于 2D 图块的地图节点。Tilemap&#xff08;图块地图&#xff09;使用 TileSet&#xff0c;其中包含了图块的列表&#…

1、什么是特征工程

1、欢迎来到特征工程!! 在这门课程中,你将学习到构建一个优秀的机器学习模型过程中最重要的一步:特征工程。你将学习如何: 使用互信息确定哪些特征最重要在几个真实世界的问题领域中创造新的特征使用目标编码对高基数分类进行编码使用k-means聚类创建分割特征使用主成分分析…

分段函数线性化方法matlab测试

目录 1 使用0-1变量将分段函数转换为线性约束 2 连续函数采用分段线性化示例 3 matlab程序测试 4 matlab测试结果说明 5 分段线性化应用 1 使用0-1变量将分段函数转换为线性约束 2 连续函数采用分段线性化示例 3 matlab程序测试 clc;clear all; gn10;tn1; x_pfsdpvar(1, t…

Python初学者学习记录——python基础综合案例:数据可视化——地图可视化

一、基础地图使用 1、基础地图演示 2、基础地图演示——视觉映射器 from pyecharts.charts import Map from pyecharts.options import VisualMapOpts# 准备地图对象 map Map() # 准备数据 data [("北京市", 99),("上海市", 199),("湖南省", 2…

(八)springboot实战——springboot3下的webflux项目全局异常处理

前言 在webflux响应式编程中&#xff0c;如何处理系统运行时异常是本节的主要内容。在传统的Servlet阻塞式web项目中主要通过HandlerExceptionResolver处理器来处理&#xff0c;而在webflux响应式web项目中&#xff0c;则是通过DispatchExceptionHandler异常处理器来处理异常。…

Hammer.js中文教程

一、什么是hammer.js hammerJS是一个开源的&#xff0c;轻量级的触屏设备javascript手势库&#xff0c;它可以在不需要依赖其他东西的情况下识别触摸&#xff0c;鼠标事件。允许同时监听多个手势、自定义识别器&#xff0c;也可以识别滑动方向。 优点&#xff1a; 为移动端网…