转眼间, 就进入C++这个新的篇章啦!
我带着些许心悸 和 激动:
心悸的是, 时间过的是如此之快, 上个学期咋们还在一起谈着C语言, 数据结构, 现在又要一起学习C++啦; 心悸的是, 我在上个半年, 耽误了很多时间, 遗漏了许多博客没写。。。
激动的是, 我们终于要爽起来了, 相信我们在学习C++之后, 尤其是学习了C++的STL, 模板之后, 就不想写C语言了(当然, C语言也有自己的优势哎)
C++是在C语言的基础之上, 容纳进去了面向对象编程思想, 并增加了许多有用的库, 以及编程范式等等。接下来, 我们初识C++(主要是C++98)章节的主要任务是:
- 了解C语言语法的不足, 以及C++是如何对C语言设计不合理的地方进行优化的
- 为后续的类和对象学习打基础
应该不少萌新有些疑问: 啥是命名空间? 命名空间有啥用? 初学者有些疑问是一件好事, 我们可以带着疑问, 去有重点地学习。
让我们先来看看下面的一串代码:
#include
int size = 4;
int size = 5;
int main()
{
printf("%d\n", size);
return 0;
}
*****
error : size 重定义
******
看到上面的代码, 有人就会说: 老陈, 你怎么写出这么挫的代码? 怎么定义了 size 两次?
嘿嘿一笑, 这么写有它的实际意义啊:你想啊, 你以后参加工作, 肯定是分项目给你和你的同事做啊, 最后把你们的代码合并起来。 如果最后你的代码中的变量名 和 张三的变量名 冲突了?怎么办?打一架、、、
这时候, 我们的祖师爷 - 本贾尼就想出了一个办法:能不能在每个人的代码之间起一堵 “墙” , 你的变量和函数 在你的区域内部起作用, 出了你的区域就不会起作用了。
这一堵墙的专业名词 就叫做 命名空间
// 1.命名空间内可以定义变量, 函数, 类型
namespace mu
{
int rand = 5;
int Sub(int a, int b)
{
return a - b;
}
}
// 2.命名空间可以嵌套
namespace N1
{
int a;
int b;
struct SLTNode
{
int val;
struct SLTNode* next;
};
namespace N2
{
int a;
int b;
struct SLTNode
{
int val;
struct SLTNode* next;
};
}
}
// 3.同一个工程中允许多个相同的命名空间, 编译器最终会合并成一个命名空间中
// eg: 如果一个工程中, 存在着 test.cpp , CSDN.cpp 两个文件,
// 这两个文件都存在着 N1 这个命名空间, 最终会合并成一个N1的命名空间
总结:
学到这里, 有些人又有些疑问: 老陈, 我把我写的代码用命名空间包了起来, 那我们在工程中又怎么使用自己写的代码??
好问题! 这就是我们即将要讲的命名空间的使用。
系好安全带, 我们发车了!!
我们先了解一下编译器对域(墙)的搜索顺序:
那我们如何突破局部域 和 全局域 , 从而访问到我们的命名空间域呢??
一共有三种方式:
namespace N
{
int a = 10;
int b = 8;
struct SLTNode
{
int val;
struct SLTNode* next;
};
}
int main()
{
printf("%d\n", N::a);
return 0;
}
namespace N
{
int a = 10;
int b = 8;
struct SLTNode
{
int val;
struct SLTNode* next;
};
}
using N::b;
int main()
{
printf("%d\n", b);
return 0;
}
namespace N
{
int a = 10;
int b = 8;
struct SLTNode
{
int val;
struct SLTNode* next;
};
}
using namespace N;
int main()
{
printf("%d\n", a);
printf("%d\n", b);
return 0;
}
有些老铁, 到了这里就想问: 老陈, 我们搞了这么多东西, 还不知道 C++ 是如何输入 和 输出的?你这搞得不行啊, 赶快来讲一讲!!
由于C++ 兼容 C语言, 那么scanf 和 printf 还是照常能用的, 不过需要引用 头文件 cstdio , 不过好像在最新的C++语法里, 引用头文件 iostream 就能照用 这两个函数 。
#include
// #include
int main()
{
int a = 0;
scanf("%d", &a);
printf("%d\n", a);
return 0;
}
*****
5
5
*****
有些老铁又要问了: 那C++有么有自己专用的输入 和 输出 函数啊?cin 和 cout 就是你们要的答案
先别发问, 我先给你们看一下例子:
#include
using namespace std;
int main()
{
int n;
cin >> n;
cout << n << endl;
return 0;
}
*****
5
5
*****
说明:
std是C++标准库的命名空间,如何展开std使用更合理呢?
自是汝才难用世,岂真吾相不当侯?
须知少日拏云志,曾许人间第一流