C++第一篇--关键字以及命名空间


作者简介 :RO-BERRY
学习方向:致力于C、C++、数据结构、TCP/IP、数据库等等一系列知识
日后方向 : 偏向于CPP开发以及大数据方向,欢迎各位关注,谢谢各位的支持


C++第一篇--关键字以及命名空间_第1张图片


目录

    • 前言
  • 1. C++关键字(C++98)
  • 2. 命名空间

前言

C++是在C的基础之上,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程范式等。熟悉C语言之后,对C++学习有一定的帮助,本章节主要目标:

  1. 补充C语言语法的不足,以及C++是如何对C语言设计不合理的地方进行优化的,比如:作用
    域方面、IO方面、函数方面、指针方面、宏方面等。
  2. 为后续类和对象学习打基础

1. C++关键字(C++98)

C++总计63个关键字,C语言32个关键字
ps:下面我们只是看一下C++有多少关键字,不对关键字进行具体的讲解。后面我们学到以后再细讲。
C++第一篇--关键字以及命名空间_第2张图片

2. 命名空间

在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的


先来写一段简单C++代码
进入一个语言世界肯定是从hello world开始啦
作为对比先来C语言版本的:

#include
int main()
{
    printf("hello world");
    return 0;
}

再来看C++版本


#include
using namespace std;
int main()
{
    cout<<"hello world"<

我们都知道在C语言文件中源文件后缀都是.c
但是在.cpp文件里,这两个代码都可以运行
输出结果都是
hello world
可是我们的头文件以及输出方式却完全不一样
C++首先兼容C语言的知识,C语言的知识在C++都可以用
C++还有面向对象,泛型以及对C语言不足的弥补

接下来我们正式介绍C++语言的基础
就是这个头文件以及下面using namespace std;这都是什么,还有这输出方式怎么看不懂


我们先来看一个例子:

#include
int rand = 0;
int main()
{
    printf("hello world");
    printf("%d",rand);
    return 0;
}

这个时候运行非常成功
C++第一篇--关键字以及命名空间_第3张图片

我们将代码改一下
你会发现只是添加了一个头文件

#include
#include
int rand = 0;
int main()
{
    printf("hello world");
    printf("%d",rand);
    return 0;
}

在这里插入图片描述

这个时候运行会出错
看报错我们发现出现的是命名冲突
rand重定义了
命名冲突主要分为

  1. 我们写的跟库冲突
  2. 我们写的互相之间冲突

这种命名冲突在C语言中的经典的问题,项目越大,我们会出现命名冲突就会越多
c++中就出现了命名空间 —> namespace


接下来我们来看namespace的用法:
定义一个命名空间

#include
#include

namespace  bay
{
    int rand = 0;
}

int main()
{
    printf("hello world");
    printf("%d",rand);
    return 0;
}

我们会发现运行成功了
命名空间就相当于一堵墙,将rand围起来了,我们就会访问不到,系统会去找那个全局rand,在这里全局的rand是一个函数名,系统就会出现提醒,提示不要这样使用

那我们如何访问我们命名空间里面的rand呢?

#include
#include

namespace  bay
{
    int rand = 0;
}

int main()
{
    printf("hello world");
    printf("%d",bay::rand);
    return 0;
}

我们在rand前加入我们的名字bay::
名称后面的冒号叫做(::)域作用限定符
这样我们就可以随便进行重复命名变量,还可以访问我们需要的变量
以后如果想避免冲突就可以采用这种方式了
如果在自己定义的命名空间出现命名冲突怎么办?
我们能想到的开发者也能想到,所以我们在命名空间里可以嵌套命名空间,可以无限套娃
提示:我们在同一个文件定义命名空间以及多个文件中国定义命名空间,如果名称相同,编译器会认为是一个命名空间,不会发生冲突,反而会将他们合并哦

那我们想使用自己定义的命名空间,再使用其中的内容是不想带那个前缀应该怎么办?

我们在头文件下面加上 using namespace 【命名空间名称】;
这样我们就可以随便使用,如果使用和里面的空间相同名称的变量,我们就会默认使用这个命名空间定义的变量,不需要加前缀。

现在我们回到一开始,using namespace std;
这句话的意思就是我们的代码就是在使用std命名空间里面的内容
所以我们使用其中的东西就不用再带上std::这个前缀
std是c++官方库定义的命名空间

#include    --->>头文件  输入输出流

int main()
{
    std::cout<<"hello world";     -->>C语言的移位运算符,C++的流插入运算符                     --->>没有带命名空间使用  要加前缀
    int a=10;
    double b=11.11;
    std::cout<>C++能自动识别输出的变量类型
    std::cout<>C++可以连续输出,endl相当于C语言里面的\n,在这里等同于换行,endl是C++里面自定义的换行符
    return 0;
}

我们每次指定命名空间很不方便,但是将命名空间全部展开又有冲突的风险
我们采用指定展开可以解决问题

using std::cout;
using std::endl;

这两个变量就被展开了,在内容里就不用加前缀了
我们就可以指定展开想要的变量或者函数都可以,这样我们的程序就可以变的非常的方便了

我们C语言里面的scanf
在C++里面就是std::cin,又叫做流提取

你可能感兴趣的:(1024程序员节)