同名实体表示同名函数、同名变量以及同名的类定义
命名空间 就是为了防止名字冲突而引入的一种机制。系统中可以定义多个命名空间,每个命名空间都有自己的名字,不可以同名
大家可以把这个命名空间可以看成一个作用域,我们在这个命名空间里定义函数,跟你另外一个命名空间里定义的函数,即便同名,也不互相影响
①命名空间定义:
②命名空间定义可以不连续,可以写在不同的位置,甚至写在不 同的源文件中。
如果以往没有定义该命名空间,那么“namespace 命名空间名”这就相当于定义了一 个命名空间
如果以往已经定义了该命名空间,那“namespace 命名空间名”这中写法就相当于打开已经存 在的命名空间并为其添加内容。
③外界如何访问某个空间中的radius()函数呢?
格式:命名空间名::实体名? 其中,::表示“作用域运算符”
命名空间作用范围就包含在这个cpp1中,对于别的cpp2中命名空间中的函数,cpp1中是不认识的
把函数声明(包括以后学习类,要把类的定义等内容)放到一个 头文件中
//当然上面需要把头文件包含进来
using namespace lisi ;//使用命名空间,这样就不用写lisi::
?
注意:如果这时候,你写了using namespace lisi ,using namespace zhangsan
那么由于它两中有一个同名函数radius,所以系统就不知道如何处理了
使用<iostream>库(输入输出流)什么叫做流,流就是 一个字符序列
#include<iostream>//这是个头文件,且没有扩展名
说明:
(1)std::命名空间,标准库命名空间,大家要记这个名字
(2)cout 表示 console(黑窗口) output ;
cout:是一个对象,一个与iostream相关的对象。cout对象被 称为“标准输出” ,一般用于向屏幕输出一些内容,索性把cout当成屏幕 也是可以的
(3)<<:不是左移,他和cout一起用时,就被重载了。
?(往左扎):是一个“输 出”运算符,它的样子像锥子,直接扎到cout中去,表示将“?”右侧的 内容写到cout(屏幕)中去。
<<可以发当成函数,有参数。第一个参数在左边,就是cout对象;和那高兴大家很老…… 当成的第二个参数,在<<的右边;第一个参数是一个标准 输出对象(屏幕),第二个参数是自字符串
(4)\n:换行,跟C语言一个意思
“\n”VS std::endl:
区别:std::endl是一个模板函数名,相当于函数指针,建议先理解成函数 ,以后会详细讲解模板函数(按F12到里面)
(1)一般来讲,能看到std::endl的地方都有std::cout的身影。
(2)std::endl一般都在语句的末尾,有两个作用。
· 输出换行符\n。
· 刷新输出缓冲区,调用flush(理解成函数)强制输出缓冲区中 所有数据(也叫刷新输出流,目的就是显示到屏幕),然后把缓 冲区中数据清除。
输出缓冲区:一段内存,使用std::cout输出的时 候实际上是往输出缓冲区中输出内容。
那么输出缓冲区什么时候把内容输 出到屏幕上呢?有如下几种情况:
(1)缓冲区满了。
(2)程序执行到main函数中的return,要正常结束了。
(3)使用std::endl了,强制 刷新输出缓冲区(把缓冲区的内容往屏幕上输出)因为使用后会调用flush()。
(4)系统不太忙的时候,会查看缓冲区内容,发现新内容就正常输出。所以有时使用std::cout时,语句行末尾是否增加std::endl都能将信息正常且立即输出到屏幕。
为什么要有这个输出缓冲区?
std::cout 直接输出信息到屏幕时,缓冲区的作用体现的不太明显,那如果是输出信 息到一个文件中,那么输出缓冲区作用就明显了,总不能输出一个字符, 就写一次文件,因为文件是保存在硬盘上,速度和内存比实在是慢太多 了,所以很有必要将数据临时保存到输出缓冲区,然后一次性地将这些数 据写入硬盘。
? 的定义:<< 返回的是一个写入了给定值的cout对象
下面四个式子等价:
“<<”运算符,右结合性问题:
“?”到底是左结合性还是右结合性,其实跟编译器有 关,不同的编译器可能结果会不同,所以,尽量不要像上面这样写代码 ——避免在一行代码中多次(超过1次)改变一个变量的值(i值)
cin也是一个对象,被称为“标准输入”
(1)cin也是一个iostream相关对象,被叫作“标准输入” ,可以 理解成键盘。
(2)?(往右扎):与cin一起使用的时候,就不是右移运算符,而是一个“输 入”运算符,它的样子也像锥子,但是是从cin往外扎(扎向变量,表示 把值传递给变量),和cout中的“?”方向刚好相反
(3)“?”的左侧运算对象是cin(键盘),也就是把从键盘上输入的数 据放入了“>>”右侧的变量中,于是,变量便有了值。
(4)“?”也是返回其左侧对象作为计算结果;下面两个式子等价
(5)之所以std::cout可以支持很多种不同类型数据的输出,是因为:
在类中写一个运算符(?)就好像写一个类中的成员函数一 样,可以把运算符“<<”看成一个函数。
简单来说?有很多个版本,有针对整型的版本,有针对字符串的版本等等
?:其实叫做运算符重载