当前位置: 首页 > news >正文

初识c++

目录

1. C++前言介绍

1.1什么是C++?

1.2C++的发展历史

2.命名空间

2.1关于命名空间(namespace)

2.2命名空间的使用

2.3嵌套命名空间

3.C++输入输出


1. C++前言介绍

1.1什么是C++?

C++是一门通用、高性能、跨平台面向对象编程语言,由丹麦计算机科学家本贾尼・斯特劳斯特鲁普(Bjarne Stroustrup)在 1979 年左右,基于 C 语言扩展开发而来。

简单来说:C++ = C 语言 + 面向对象 + 现代编程特性,它既保留了 C 语言操作硬件、极致高效的优点,又增加了更适合开发大型软件的高级功能。

1.2C++的发展历史

C++还在不断的向后发展。但是:现在社会上主流使用还是C++98C++11,所有重点要把C++98和C++11 掌握好,随着对C++理解不断加深,有时间可以去琢磨下更新的特性。

2.命名空间

2.1关于命名空间(namespace)

在C/C++中,变量、函数和后⾯要学到的类都是⼤量存在的,这些变量、函数和类的名称将都存在于全局作⽤域中,可能会导致很多冲突。使⽤命名空间的⽬的是对标识符的名称进⾏本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的
在C/C++中,变量、函数和后⾯要学到的类都是⼤量存在的,这些变量、函数和类的名称将都存在于全局作⽤域中,可能会导致很多冲突。使⽤命名空间的⽬的是对标识符的名称进⾏本地化,以避免命名 冲突或名字污染,namespace关键字的出现就是针对这种问题的
-----命名空间就是为了防止「名字冲突」,让代码更安全、更清晰
例如:你想创建一个rand的全局变量,但与所用库里面的冲突了,这时候就会报错
注:编译查找⼀个变量的声明/定义时,默认只会在局部或者全局查找,不会到命名空间⾥⾯去查找
#include <stdio.h> #include <stdlib.h> int rand = 10; int main() { // 编译报错:error C2365: “rand”: 重定义;以前的定义是“函数” printf("%d\n", rand); return 0; }

接下来我们就可以创建一个自己的命名空间

#include<stdlib.h> #include<stdio.h> //namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量,所以下 //⾯的rand不在冲突了 namespace qt//命名空间的名字 { //定义变量 int rand=10; //这样就不会报错了 //定义函数 int Add(int a,int b) { return a+b; } //定义类型 struct node { struct node*next; int val; }; //嵌套命名空间 namespace sub { int c; int d; int Sub(int a, int b) { return a - b; } } int main() { // 这⾥默认是访问的是全局的rand函数指针 printf("%p\n", rand); // 这⾥指定bit命名空间中的rand printf("%d\n", bit::rand); return 0; }

上面的代码定义了一个名为qt的命名空间,该命名空间包含有变量、函数、类型、命名空间。和其他名字一样,命名空间的名字也必须在定义它的作用域内保持唯一,如果在同一个作用域中出现多个相同名字的命名空间,编译器最后会把他们合并,这意味着命名空间可以是不连续的。命名空间既可以定义在全局作用域内,也可以定义在其他命名空间中,但是不能定义在函数或类的内部。、

2.2命名空间的使用

每个命名空间都是一个作用域
编译查找⼀个变量的声明/定义时,默认只会在局部或者全局查找,不会到命名空间⾥⾯去查找。
命名空间中的每个名字都必须表示该命名空间内的唯一实体。因为不同命名空间的作用域不同,所以在不同命名空间内可以有相同名字的成员
定义在某个命名空间中的名字可以被该命名空间内的其他成员直接访问,也可以被这些成员内嵌作用域中的任何单位访问。位于该命名空间之外的代码则必须通过域作用限定符::明确指出所用的名字属于哪个命名空间
namespace qt { int a = 10; int b = 20; } int a = 30;//全局 int main() { int a = 20;//局部 printf("%d\n", a); printf("%d\n", ::a); // ::前面什么都不写代表全局域 printf("%d\n", qt::a); //qt的命名空间 return 0; }

接下来是命名空间的三种使用方法
1.命名空间名称及作用域限定符
int main() { printf("%d\n", qt::a); return 0; }

2.使用using将命名空间中某个成员展开

using qt::a; int main() { int a=10; printf("%d\n", qt::a); printf("%d\n", a); return 0; }
3.展开命名空间的所有成员
using namespce qt;//展开 int a=100; int main() { printf("%d\n", a);//这里会报错 printf("%d\n", qt::a);//要明确出自哪里 printf("%d\n", b); return 0; }

using namespace qt这是将整个命名空间展开,将使得所有作用域都可以访问qt

当命名空间被展开,很可能会跟其他定义的名字成员产生冲突。但是这种冲突是被允许的,但必须明确指出名字的命名空间

2.3嵌套命名空间

嵌套的命名空间同时是一个嵌套的作用域,它嵌套在外层命名空间的作用域中。嵌套的命名空间中的名字遵循的规则与往常类似:内层命名空间声明的名字将隐藏外层命名空间声明的 同名成员。在嵌套的命名空间中定义的名字只在内层命名空间中有效,外层命名空间的代码想要访问它必须在名字前添加限定符。
namespace qt { int a = 10; namespace qt1 { int a = 10;//将外层作用域的a隐藏了 int b = 20; } int c = qt1::b;//正确访问的是qt1里面的d namespace qt2 { int q = qt1::d;//正确 } } int main() { printf("%d\n", qt::qt2::q); printf("%d\n", qt::qt1::a); printf("%d\n", qt::a); return 0; }

3.C++输入输出

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

关于<iostream>是c++的头文件(新编译器),不+.h(有点旧编译器还支持<iostream.h>格式)

cout标准输出对象(控制台),endl输出换行符 + 刷新缓冲区,专门用在cout输出语句里。

cin标准输入对象(键盘),它们都要包含头文件及按照命名空间的使用方法去使用std

<<是流插入运算符,>>是流提取运算符。

使用C++的输入输出更加方便,不需要像printf和scanf输入输出那样,需要手动控制格式。C++的输入输出可以自动识别变量类型(本质上是运算符重载),但cout和cin的效率比较低。

http://www.jsqmd.com/news/502652/

相关文章:

  • 避坑指南:uni-app视频播放器开发中那些没人告诉你的权限陷阱
  • 软考中级:第4章 信息系统架构 学习笔记
  • 高效掌握百度网盘命令行工具:终端文件管理全面指南
  • 你当过不懂珍惜的爱人,才学会如何郑重地对待爱意;你当过卑微讨好的讨好者,才明白边界感是自我保护的铠甲;
  • BurpSuite 多漏洞自动化探测插件 | XSS、SQL 注入(10 种数据库)、SSTI 模板注入(6 大家族 20+ 引擎)、NoSQL 注入
  • GME-Qwen2-VL-2B惊艳作品集:多风格艺术图片的AI诗意解读
  • foobox-cn终极美化指南:3步打造你的专属音乐播放器
  • 从零搭建PyTorch开发环境:Anaconda虚拟环境与PyCharm高效配置指南
  • 5分钟上手circlize:让你的R语言环形布局可视化效率提升300%
  • Sim2Real实战:用NVIDIA Isaac Sim训练机器人抓取,5步搞定迁移到真实世界
  • 相平面法 “质心侧偏角-质心侧偏角速度” 可自主调节参数根据不同的速度和车轮转角以及前后轮的滑...
  • 读克劳士比的《质量免费》有感
  • 手把手教你用Verilog实现APB异步桥:以PSEL信号同步为例的避坑指南
  • 以太网模块搭桥:S7-1500 PLC 对接 S7-200 SMART PLC 实现汽车焊装车间上位机集中管理
  • 手把手教你用USB_CAN_Tool监控设备状态:心跳报文配置避坑指南
  • 搜索(提高)
  • MusePublic Art Studio惊艳效果:粒子特效/流体模拟/玻璃折射质感
  • 互联网大厂Java三轮面试全流程实战问答与解析
  • 【大模型应用】3.分块入门
  • [数据采集实战] 用Python与BeautifulSoup解析豆瓣电影Top250榜单
  • 收藏!小白程序员必看:OpenClaw揭秘AI记忆如何改变未来助手体验
  • 突破自动驾驶数据标注瓶颈:3D点云标注工具的五大技术革新与行业应用
  • 主管护师备考资料怎么选?基于近三年考情分析的实用建议 - 医考机构品牌测评专家
  • 电子钱包背后的秘密:拆解NXP S50卡值块存储原理与加减值操作
  • IDEA Terminal无法启动?5分钟搞定PowerShell路径配置(避坑指南)
  • 告别重复造轮子:借快马AI一键生成高效STM32串口驱动模块,提升开发效率
  • 论文全文降AI率后怎么检验效果?验证方法教程
  • 2026年主管护师考试押题卷推荐及备考应用指南 - 医考机构品牌测评专家
  • Mac鼠标优化终极指南:告别原生限制,解锁专业级操控体验
  • Hunyuan-MT-7B效果实测:33种语言互译,Chainlit界面一键体验