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

关于C++的入门基础

一.C++的程序初识

一.C++的程序初识

首先我们要知道在C++中兼容C语言的多种语法,所以在C语言里面实现的hello world 依旧可以运行,在C++中需要把定义文件的后缀改成.cpp,在vs编译器中看到.cpp为后缀会自动调用C++编译。

在C中:

#include<stdio.h>
int main()
{printf("hello word\n");return 0;
}

在C++中有自己的一套输入输出,严格来说C++中的应该改是下面类似代码:

#include<iostream>
using namespace std;
int main()
{cout << "hello word\n" << endl;return 0;
}

二. 关于命名空间

2.1关于namespace的价值

在后面我们学习C++过程中,后面变量, 函数等后面要学到的大量存在的类,因为这些变量,函数,类等都存在域全局作用域中,会导致很多的冲突,为了避免这种冲突,namespace就是为了针对这些问题出现的。

下面举一个在C++中存在命名冲突的问题,在这里引入namespace 就是为了更好的解决这些问题

#include<stdio.h>
#include<stdlib.h>
int rand = 10;int main()
{printf("%d\n", rand);return 0;
}

这个函数会在此处报错:

因为编译器在查找的时候会默认从局部域查找再从全局域查找,这里局部域里面没有rand 但是全局域里面有两个rand ,所以就导致重定义的问题。

2.2关于namespace 的定义

1.定义命名空间,在这里需要用到namespace关键字,后面跟上命名空间的名字,然后跟上一对{},花括号里面是命名空间的成员,这里面可以定义变量,函数,类型等。

2,namespace本质是定义出一个域,这里需要注意的是,域里面不属于全局变量,不同的域可以定义同名变量,所以这样rand就不会冲突了。

3。在C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找⼀个变量/函数/ 类型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。局部域和全局域除了会影响 编译查找逻辑,还会影响变量的⽣命周期,命名空间域和类域不影响变量⽣命周期。

4.namespace只能定义在全局,还可以嵌套定义。

5.在多文件中namespace重名不会冲突

6.C++标准库都存在std的命名空间中

::这个操作符是域作用限定符,指定访问某个域里面的,还要注意namespace只能定义在全局,不能定义在局部。

//关于正常的命名定义
//bitter是命名空间的名字,一般开发项目名字做
//命名空间
namespace bitter
{//命名空间可以定义变量/函数/类型int rand = 10;int Add(int left, int right){return left + right;}struct Node{struct Node* next;int val;};
}
int main()
{//这里默认是访问的全局的rand 函数指针printf("%p\n", rand);//这里访问的是指定bitter命名空间中的randprintf("%d\n", bitter::rand);return 0;
}

命名空间还可以嵌套:

//命名空间还可以嵌套
namespace bitter
{//小王namespace wang{int rand = 1;int Add(int left, int right){return left + right;}}//小李namespace li{int rand = 4;int Add(int left, int right){return left + right;}}
}
int main()
{printf("%d\n", bitter::wang::rand);printf("%d\n", bitter::li::rand);printf("%d\n", bitter::wang::Add(2,3));printf("%d\n", bitter::li::Add(4,5));return 0;
}

需要注意的是,多文件中定义同名namespace,他们会默认合并在一起,就像同一个namespace一样,这里就不演示了,感兴趣的可以自己调试着看一下

2.3命名空间使用

编译查找一个变量的声明/定义实习,默认智慧在局部域查找或者查找,不会到命名空间里去查找,所以使用命名空间中的定义的变量/函数,有三种方式:

1.指定命名空间访问,项目中推荐

2. using将命名空间中的某个成员展开,项目中经常访问不存在冲突的成员推荐这种方式,比如using bitter ::STpush;

3.展开命名空间中的全部成员,但是在项目中不推荐这种方式,冲突的风险很大,日常联系为了方便推荐使用: using namespace bitter;

代码演示:

namespace bitter 
{int a = 0;int b = 2;
}
int main()
{//这里编译器会报错,显示未定义标识符printf("%d\n", a);return 0;}//这里需要指定命名空间访问
int main()
{printf("%d\n", bitter::a);return 0;
}//下面是using 将命名空间的某个成员展开
using bitter::b;
int main()
{printf("%d\n", b);printf("%d\n", bitter::a);return 0;
}//展开命名空间的全部成员
using namespace bitter;
int main()
{printf("%d\n", a);printf("%d\n", b);return 0;
}

三.关于C++的输入输出

1.<iostream>是标准输入输出任何类型对象

2.cout<<流插入(输出)   cin>>流提取(输出)

3.endl在结果上相当于"\n",实际上是个函数

//这里输入输出可以自动识别类型
int main()
{int a = 5;double b = 2.3;char c = 'c';cout << a << " " << b << "c" << endl;
}int main()
{// 在io需求⽐较⾼的地⽅,如部分⼤量输⼊的竞赛题中,加上以下3⾏代码// 可以提⾼C++IO效率ios_base::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);return 0;
}

四.关于缺省参数

缺省值是指声明或者定义函数时作为函数的参数指定的一个缺省值/这里需要注意缺省参数不能声明跟定义同时给,全缺省就是全部参数给缺省值,半缺省就是部分形参给缺省值。

这里需要注意C++规定版缺省参数必须从左往右依次连续给缺省值,不能间隔条约给缺省值,函数调用同上。在函数声明和定义分离时缺省参数不能在函数声明和定义中同时出现,规定必须函数声明给缺省值。

void Func(int a = 8)
{cout << a << endl;
}
int main()
{Func();// 没有传参时,使⽤参数的默认值Func(5); //传参时,使⽤指定的实参return 0;
}//全缺省
void Func(int a = 8,int b=10)
{cout << a <<b<< endl;
}
int main()
{Func();return 0;
}//半缺省
void Func(int a = 8, int b = 10)
{cout << a << b << endl;
}
int main()
{Func(4);return 0;
}

http://www.dtcms.com/a/391912.html

相关文章:

  • TDengine 标准差 STDDEV 函数使用场景及意义
  • color-printf一个轻量级、高兼容的终端彩色打印工具
  • Python实现等离子体反应优化 (Plasma Generation Optimization, PGO)(附完整代码)
  • 【C++】vector
  • LeeCode120. 三角形最小路径和
  • 元启发式算法分类
  • Ansible-file模块
  • Vue项目使用Coze的聊天窗(一)
  • 关于将tomcat、nginx 实现 注册window服务并实现自启动
  • 【精品资料鉴赏】358页 数字政府大数据中心资源平台治理建设方案
  • 关于Spring Bean之间的循环依赖
  • pake将前端web项目打包成windows可安装文件
  • 低轨卫星应用:MCU、CANFD与DCDC芯片的集成解决方案
  • AI 编程Claude Code使用详细教程
  • vue3 下载文件方式(包括通过url下载文件并修改文件名称,和文件流下载方式)
  • 如何高效筛选海量文献,避免浪费时间?
  • heyday
  • Go语言结构体初始化全面指南与最佳实践
  • 神经网络学习笔记15——高效卷积神经网络架构GhostNet
  • Mysql的Exists条件子查询
  • 电脑系统windows10怎么合盘
  • 一文详解Stata回归分析
  • GPS 定位:连接时空的数字导航革命
  • Rust 特有关键字及用法
  • 关于C++游戏开发入门:如何从零开始实现一个完整的游戏项目!
  • OpenRank结合游戏及算法技术原理
  • 协方差矩阵、皮尔逊相关系数
  • Redis 三大架构模式详解:主从复制、哨兵、Cluster 搭建全指南
  • [x-cmd] 如何安全卸载 x-cmd
  • 整体设计 语言拼凑/逻辑拆解/词典缝合 之 3 词典缝合(“他”):显露词典编纂行列式项的 “自然”三“然”:自然本然/ 自然而然/自然实然