C++基础笔记:1、命名空间和输入输出

一、命名空间
  C++与C的区别中,很关键的一个就是C++多了一个作用域。C的作用域有三种,文件编译单元(main)、函数复合语句。*(其中复合语句就是多个语句用{}括起来的一个语句,其中申请的局部变量只能在其使用)*而C++中多了一个类作用域
 老师所说,这个类作用域的优势是在大型项目会有优势,大型项目中需要很多人合作完成,那就难免会出现变量和函数的重复命名,而命名空间使得这些函数在调用的时候能够区分开来。
 命名空间本质就是个独立于主函数,可以随时调用的作用域,和函数不同的时在使用的时候需要前置标明是哪个命名空间的。一直使用的格式也很简单:using namespace + 空间名。其中空间名可以不加,也就构成了所谓的匿名空间个人理解C++的匿名空间和C语言中的static修饰类似,匿名空间中的标识作用域只会在自身文件中,文件外部无法使用这些标识符。同一个层次的多个匿名空间会合并为一个。而匿名空间的补完写法如下:

namespace  __compiler_generated_name__
{
}
using namespace namespace  __compiler_generated_name__;

匿名空间中的全局标识符是和文件中的全局变量相冲突的:

namespace
{
    int a = 2018;
}
int a = 1;
int main()
{
    return 0;
}

这样就会报错。
  命名空间成员的调用格式如下:空间名::函数名/标识符……
  标准数据库中的命名空间是std。其中包含了常用的输入输出格式如 cout <<, cin>> 之类的。诺诗不适用using namespace std;的命令,也可用通过std::cout的方式调用。

二、标准输入输出
  C++为了实现数据的输入输出定义了庞大的类库主要有ios、istream、ostream、istream、iostream等,其中ios是根基类。
  实际使用中用的表较多是cin(标准输入流)和cout(标准输出流)。cerr和clog是用于输出错误的,区别也只是是否把错误存入缓冲区。
  cin和cout实现输入输出是使用了类的标志符重载,将位操作用的"<<“和”>>"和重载为输入输出指令,且因为函数重载的原因,系统能够自动根据字符右边变量类型调用函数,所以不需要声明数据类型,这里就不重点介绍了。这就是和C语言中printf的本质不同,C++面向对象,会根据输入对象自动判别,而C面向过程,printf输出的时候需要声明变量类型。需要注意的是C++中单’\n’是没有刷新缓存区的作用的,所以换行都是推荐使用endl(能刷新缓存区)指令。
  输入输出格式的控制分三种输入输出流枚举常量内部函数格式控制操作符,前两者经常一起使用。枚举常量使用的时候需要加ios::,内部函数的使用格式cout.函数名,格式控制操作符在cout<<语句中使用即可。
  2.1常用的枚举常量:
  dec(十进制)、oct(八进制)、hex(十六进制)、left(左对齐)、right(右对齐)、showbase(输出数值前加基数指示符)、showpoint(补全浮点数中的小数点和尾数后面的0)、scientific(设置后使浮点数按照科学表示法输出)和fixed(和scientific相对,浮点数按定点表示法输出)。
  
  2.2常用的输入输出流内部函数:
  char fill(char c);设置填充字符,默认的为空格。
  1、如果有参数c,返回值为之前用的填充字符,设置c为当前填充字符。
  2、如果没有参数c,也就是fill(),则返回当前填充字符。
  
  int precision(int n );用于设置浮点精度,系统默认设置为6。
  1、有参数则设置精度,返回之前的输出精度。
  2、无参数的时候返回当前输出精度。
  
  int setf(long f);int unsetf(long f);其中的 f 就是枚举型常量,前者根据枚举型常量的不同改变输出设置,后者则用来取消当前设置,否则下面的设置是无效的。
  
  int width(int w);用了设置输出所占字节数。
  1、如果有参数w,则时正常设置所占字节数,并返回之前设置的参数值。
  2、如果没有参数,则返回当前设置的参数值。
  
  cin.getline()get()是用于输入的函数,前者偏向获取字符串,后者偏向获取单字符。

    cin.get();                                  //获取一个字符串为返回值
    cin.get(char ch);                      //获取一个字符串到ch,成功返回非0值,失败返回0
    cin.get(char* str, int size);        //获取size-1个字符,遇到结束符则结束读取。
    cin.getline(char * str, int size);  //与上面那个类似

cin,getchar()和cin.getline()读取字符串的区别在于,cin.getline读取字节后会停在结束符后一位。而getchar(),则会停在结束符上。
  cin.getline()和getline()的区别在于,使用getline()需要带头文件,而cin.getline()属于输入流函数。
  
  2.3常用格式控制操作符:
  dec、oct、hex、endl、ends、flush、setfill(int c),setw(int n)、setprecion(int n)。
  其中表示进制的与枚举型常量功能相同,注意转换进制的时候,如果变量时字符型则要通关static_cast(变量名)转换数据类型。
  1)endl,刷新流。
  2)ends,输出一个字符'\0'
  3)flush,刷新一个输出流。
  4)setfill(int c),设置填充为字符c。
  5)setw(int w),设置下一个输出宽域为w。
具体使用如下:

代码:

 12     char buf[32];
 13 
 14     cin.getline(buf, 32);
 15     cout << setw(15) << buf << endl;
 16     cout << setw(15) << left << setfill('*')<< buf<

输入helloworld后:

[root@jsetc 12.18]# ./2
helloworld
     helloworld
helloworld*****
*****helloworld
377
ff
1.231231e+02
123.12312

对于浮点数操作:

  7     float f = 100/ 6.;   //c++中'/'代表了整数除法,float f = 100/6 的输出结果是16
  8     cout<< f <

结果为:

[root@jsetc 12.18]# ./4
16.6667
16.67

你可能感兴趣的:(C++基础笔记:1、命名空间和输入输出)