【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.mzph.cn/news/651310.shtml

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

相关文章

编程那么难,为什么不弄一个大众一学就会的计算机语言呢?

大家好&#xff01;今天要和大家聊聊一个有趣的想法&#xff1a; 想象一下&#xff0c;如果编程变得像拼乐高积木一样简单&#xff0c;那将是多么美妙的事情啊&#xff01;不需要费尽心思去学习繁杂的语法规则和复杂的逻辑&#xff0c;只需要将代码块像积木一样拼接起来&#x…

深入浅出 diffusion(3):pytorch 实现 diffusion 中的 U-Net

导入python包 import mathimport torch import torch.nn as nn import torch.nn.functional as F silu激活函数 class SiLU(nn.Module): # SiLU激活函数staticmethoddef forward(x):return x * torch.sigmoid(x) 归一化设置 def get_norm(norm, num_channels, num_groups)…

TensorRT英伟达官方示例解析(一)

系列文章目录 TensorRT英伟达官方示例解析&#xff08;一&#xff09; TensorRT英伟达官方示例解析&#xff08;二&#xff09; TensorRT英伟达官方示例解析&#xff08;三&#xff09; 文章目录 系列文章目录前言一、参考资料二、配置系统环境三、00-MNISTData四、01-SimpleD…

银行数据仓库体系实践(4)--数据抽取和加载

1、ETL和ELT ETL是Extract、Transfrom、Load即抽取、转换、加载三个英文单词首字母的集合&#xff1a; E&#xff1a;抽取&#xff0c;从源系统(Souce)获取数据&#xff1b; T&#xff1a;转换&#xff0c;将源系统获取的数据进行处理加工&#xff0c;比如数据格式转化、数据精…

【labVIEW】学习记录

【labVIEW】学习记录 一、简介二、安装及激活三、使用 回到目录 一、简介 labVIEW&#xff08;Laboratory Virtual Instrument Engineering Workbench&#xff09;是一款由美国国家仪器公司&#xff08;National Instruments&#xff09;开发的可视化编程环境和开发平台。LabV…

3.3 实验三:以太网链路聚合实验

HCIA-Datacom实验指导手册&#xff1a;3.3 实验三&#xff1a;以太网链路聚合实验 一、实验介绍&#xff1a;二、实验拓扑&#xff1a;三、实验目的&#xff1a;四、配置步骤&#xff1a;步骤 1 掌握使用手动模式配置链路聚合的方法步骤 2 掌握使用静态 LACP 模式配置链路聚合的…

【JavaEE进阶】 数据库连接池与MySQL企业开发规范

文章目录 🌴数据库连接池🎋数据库连接池的使用🎄MySQL企业开发规范⭕总结🌴数据库连接池 数据库连接池负责分配、管理和释放数据库连接,它允许应⽤程序重复使⽤⼀个现有的数据库连接,⽽不是再重新建⽴⼀个. 没有使⽤数据库连接池的情况:每次执⾏SQL语句,要先创建⼀…

Linux系统——函数与数组

目录 一、函数 1.函数的定义 2.使用函数 3.定义函数的方法 4.函数举例 4.1判断操作系统 4.2判断ip地址 5.查看函数列表 6.删除函数 7.函数返回值——Return 8.函数的作用范围 9.函数传参 10.函数递归 10.1病毒 10.2阶乘 10.2.1 用for循环 10.2.2函数阶乘 10.…

Python实战项目Excel拆分与合并——合并篇

在实际工作中&#xff0c;我们经常会遇到各种表格的拆分与合并的情况。如果只是少量表&#xff0c;手动操作还算可行&#xff0c;但是如果是几十上百张表&#xff0c;最好使用Python编程进行自动化处理。下面介绍两种拆分案例场景&#xff0c;如何用Pandas实现Excel文件的合并。…

ELK日志解决方案

ELK日志解决方案 ELK套件日志系统应该是Elasticsearch使用最广泛的场景之一了&#xff0c;Elasticsearch支持海量数据的存储和查询&#xff0c;特别适合日志搜索场景。广泛使用的ELK套件(Elasticsearch、Logstash、Kibana)是日志系统最经典的案例&#xff0c;使用Logstash和Be…

Scikit-learn (sklearn)速通 -【莫凡Python学习笔记】

视频教程链接&#xff1a;【莫烦Python】Scikit-learn (sklearn) 优雅地学会机器学习 视频教程代码 scikit-learn官网 莫烦官网学习链接 本人matplotlib、numpy、pandas笔记 1 为什么学习 Scikit learn 也简称 sklearn, 是机器学习领域当中最知名的 python 模块之一. Sk…

burp靶场--WebSockets安全漏洞

burp靶场–WebSockets安全漏洞 https://portswigger.net/web-security/websockets/what-are-websockets ### 什么是 WebSocket&#xff1f; WebSocket是一种通过 HTTP 发起的双向、全双工通信协议。它们通常在现代 Web 应用程序中用于流数据和其他异步流量。 在本节中&#x…

ChatGPT 官方中文页面上线

根据页面显示&#xff0c;OpenAI 现已推出 ChatGPT 的多语言功能 Alpha 版测试&#xff0c;允许用户选择不同语言的界面进行交互。 如下图所示&#xff0c;ChatGPT 会检测系统当前所使用的语言&#xff0c;并提示用户进行语言切换。 用户也可通过设置页面选择其他语言。目前&a…

Linux之系统安全与应用

Linux系统提供了多种机制来确保用户账号的正当&#xff0c;安全使用。 系统安全措施 一. 清理系统账号 1.1 将用户设置为无法登录 Linux系统中除手动创建的各种账号外&#xff0c;还包括随系统或程序安装过程而生成的其他大量账号。除了超级用户root以外&#xff0c;其他的…

免费开源的微信小程序源码、小游戏源码精选70套!

微信小程序已经成为我们日常的一部分了&#xff0c;也基本是每个程序员都会涉及的内容&#xff0c;今天给大家分享从网络收集的70个小程序源码。其中这些源码包含&#xff1a;小游戏到商城小程序&#xff0c;再到实用的工具小程序&#xff0c;以及那些令人惊叹的防各大站点的小…

【Linux】文件描述符 | 重定向 | C文件指针与fd的关系 | 用户级缓冲区

文章目录 一、文件描述符1. 理解&#xff1a;Linux下一切皆文件2. 文件描述符&#xff08;fd&#xff09;的概念3. 文件描述符的分配规则4. 进程创建时默认打开的 0 & 1 & 2 号文件 二、重定向1. 重定向的本质2. 使用dup2系统调用函数3. bash下的三种重定向4. 三种重定…

全面理解“张量”概念

1. 多重视角看“张量” 张量&#xff08;Tensor&#xff09;是一个多维数组的概念&#xff0c;在不同的学科领域中有不同的应用和解释&#xff1a; 物理学中的张量&#xff1a; 在物理学中&#xff0c;张量是一个几何对象&#xff0c;用来表示在不同坐标系下变换具有特定规律的…

(N-141)基于springboot,vue网上拍卖平台

开发工具&#xff1a;IDEA 服务器&#xff1a;Tomcat9.0&#xff0c; jdk1.8 项目构建&#xff1a;maven 数据库&#xff1a;mysql5.7 系统分前后台&#xff0c;项目采用前后端分离 前端技术&#xff1a;vueelementUI 服务端技术&#xff1a;springbootmybatis-plusredi…

GNS3连接Vmware虚拟机

1 安装配置Gns3、Vmware 安装过程略&#xff0c;最终版本号&#xff1a; Gns3&#xff1a;2.2.44.1 Vmware&#xff1a;17.0 建议保持一致&#xff0c;特别是Gns3&#xff0c;功能虽然强大的&#xff0c;但bug问题感觉也不少 2 虚拟机配置 新建两台Ubuntu 22.04虚拟机&#…

【JavaScript权威指南第七版】读书笔记速度

JavaScript权威指南第七版 序正文前言&#xff1a;图中笔记重点知识第1章 JavaScript简介第一章总结 第2章 词法结构注释字面量标识符和保留字Unicode可选的分号第二章总结 第3章 类型、值和变量【重要】原始类型特殊类型第三章总结 第4章 表达式与操作符表达式操作符条件式调用…