从C语言开始的C++编程生活(1)

前言

本系列文章承接C语言的学习,需要**++有C语言的基础++** 才能学会哦。

第1篇主要讲的是有关于C++的**++命名空间、输入和输出++** 。
C++才起步,都很简单呢!



目录

前言

命名空间namespace

基本语法

作用

使用命名空间

[域作用限定符 ::](#域作用限定符 ::)

基本语法

[using namespace 命名空间域名](#using namespace 命名空间域名)

基本语法

作用

[using 命名空间域名 :: 变量名](#using 命名空间域名 :: 变量名)

基本语法

作用

C++的输入和输出

["<< "流插入符](#“<< ”流插入符)

基本语法

代码解释

[" >>"流提取符](#“ >>”流提取符)

基本语法

代码解释


命名空间namespace

基本语法

cpp 复制代码
namespace space_name
{
    int a = 0;
    float b = 0;
    int Add(int a, int b)
    {
        printf("%d", a + b);
    }
};

这段代码定义了一段名为space_name的命名空间,该命名空间内包含了整型变量a,单精度浮点型b和函数Add。

作用

知识点补充:

①不同的变量因为编写时所处的位置不同,可能会处于不同的作用域 。作用域有全局域、函数局部域、这一部分讲到的命名空间域还有后面会学到的类域。

②变量在不同域中命名,是可以重复的,编译时也不会报错。

③写好的代码在进行编译的时候,编译程序会按照顺序查找变量、函数的标识符(名称)。++默认的查找顺序是:函数局部域------>全局域(------>命名空间域)++。命名空间域,编译程序默认是不查找的。

++创建一个新的域,与全局域和其他域隔离开来,从而达到重复命名变量或者函数的目的。++

cpp 复制代码
​#include<stdio.h>
int a = 222;
namespace space_name
{
    int a = 333;
    float b = 0;
    int Add(int a, int b)
    {
        printf("%d", a + b);
    }
};

int main()
{
    int a = 111;
    printf("%d", a);
    return 0;
}​

使用同上的命名空间域,我们可以发现,代码里同时存在两个变量a且没有发生报错,并且main函数输出a时,++输出的是main函数局部域里的a++。

ps:在实际的工作中,编写一个程序可能会产生几万行甚至更多的代码量,如此多的代码量,只让一个程序员来维护是不现实的。而当多名程序员编写代码时,容易因为命名冲突导致程序无法运行,仅靠协商来处理十分没有效率。++因此就需要使用到命名空间,将每个程序员的变量或者函数命名放在不同的命名空间域中进行隔离。++每个程序员使用自己命名空间里的变量就不会担心重复命名了。

使用命名空间

Q:上文代码在main函数里,输出了main函数局部域里的a,那我们要如何才能使用在命名空间域里的a呢?

由于编译系统在确定变量的时候,首先在局部域内查找变量的标识符,++在main函数里找到之后了一个a之后便不会再继续查找。++ 所以直接使用a的话,程序只能访问到main函数里的a。++所以我们就要使用域作用限定符!++

域作用限定符 ::

基本语法
cpp 复制代码
//没有 :: ,默认先去局部域找,再去全局域找,但是不回去,命名空间域找
printf("%d\n", a);
//使用了 :: ,但是 :: 前没有命名空间域名,因此只在全局域找
printf("%d\n", ::a);
//使用了 :: ,而且 :: 前有命名空间域名,因此只在space_name中找
printf("%d\n", space_name::a);

通过这段代码我们就可以依次输出main函数里面的a、全局域的a以及命名函数里的a。

由此可见,只有 :: 出现的时候,编译程序才会去命名空间域中查找变量。
而全局域实际上是一个特殊的命名空间域,如果我们用第二行代码的方法去访问space_name中的变量的话,

cpp 复制代码
printf("%f", ::b);

会有如此报错:

global namespace就是全局域的意思。


Q:每次使用命名空间域里面的变量,都要加命名空间域名和 :: ,那不是很麻烦吗?

A:对于公司里面进行的大工程 ,这一点小麻烦可以避免更大的麻烦,所以是一种不得不采取的有效措施。但是如果是自主学习时编写的小型程序,就可以用一些小方法来避免这个小麻烦。

using namespace 命名空间域名

基本语法
cpp 复制代码
using namespace space_name;//使用整个space_name命名空间域
作用

让程序在全局域中找完变量后继续去指定的命名空间域中查找。这样做,++相当于将整个命名空间域都放进全局域中++ ,取消命名空间域和全局域之间的隔离。++如果全局域和命名空间域里的变量有重复,就会报错。++

这种方法看上去固然危险,所以我们还有一个方法。

using 命名空间域名 :: 变量名

基本语法
cpp 复制代码
using space_name::a;//使用space_name域中的变量a
作用

与上一种方法相比,这种方法只选择使用一个变量,其他变量仍然需要用 :: 查找。这样至少可以保证其他变量是安全的。++但是同样的,选择使用的命名空间域变量和全局域变量有重复也会有相同报错。++

综上所述,我们要根据具体情况来选择要不要使用这两个语句哦!

C++的输入和输出

c++的输入和输出需要包含头文件<iostream>

(其中包含了stdio.h,也就是说可以使用C语言里面的输入输出函数。但具体要看编程的平台,VS是包含了的)

C和C++同根同源,因此C的大部分语法和库函数,C++都可以使用。但本文承接C语言的学习,所以只讲C语言里没有的。

"<< "流插入符

基本语法

cpp 复制代码
int i = 111;
std::cout<<"hello"<<" world\n"<< i << std::endl;

这段代码依次把字符串"hello"、" world\n",整型变量 i ,和std::endl插入到了输出流std.cout中,输出结果为(111后有换行):

代码解释

①std::cout指的是++命名空间域std里的cout++ ,++std为C++标准库的命名空间域++ ,++cout全称是character output stream,也就是字符输出流++ 。

②'<<'流插入符将后续的字符都++插入到输出流++ ,从而将其输出。

③i是整型变量,用'<<'插入之后,++程序自动将其变为字符串,再插入到输出流++

( 类似于printf("%d",i); )。

④++std::endl是一个函数++ ,++返回一个换行符并且刷新缓冲区++ 。在不同的平台,++换行符的表示形式可能不同++ 。这个函数可以识别不同的平台,再++根据你的平台返回对应的换行符++ 。这个函数比直接使用'\n'换行更加安全可靠,还附带刷新缓冲区的功能,推荐使用!!

⑤无法对输入流使用'<<',++输入流不支持++ ,会报错。

⑥要想进行格式化输出,前期学习还是推荐使用printf函数。

" >>"流提取符

基本语法

cpp 复制代码
int i = 0;
int a = 0;
std::cin >> i >> a;

这段代码让程序一次从输入流里读取数据,并且给变量 i 和 a 赋值。

代码解释

①std::cin同上,而++cin全称是character input stream,也就是字符输入流++ 。

②++一个"<<"读取一次++。


❤~~本文完结!!感谢观看!!欢迎来我博客做客~~

相关推荐
xiecoding.cn27 分钟前
C语言和C++到底有什么关系?
c语言·开发语言·c++·c/c++·c语言入门
Run_Teenage30 分钟前
C语言每日一练——day_11
c语言·开发语言
带鱼吃猫1 小时前
C语言文件操作入门
c语言·开发语言
c7_ln1 小时前
C++输入输出流第一弹:标准输入输出流 详解(带测试代码)
c++·g++·标准输入输出
Aomnitrix2 小时前
Qt 实操记录:打造自己的“ QQ 音乐播放器”
开发语言·c++·qt·ui·音视频
wzysyrda2 小时前
CRTP奇异递归模板模式
c++
f狐0狸x2 小时前
【蓝桥杯每日一题】3.17
c语言·c++·算法·蓝桥杯·二进制枚举
爱康代码2 小时前
【c语言数组精选代码题】
c语言·开发语言·数据结构
此刻我在家里喂猪呢4 小时前
C++ 介绍STL底层一些数据结构
c++