一 命名空间
提起命名空间这个概念我们不得不提起另一个概念——作用域。
作用域——每个用户命名的标识符都有一个有效的作用域,所谓的“作用域”就是指程序中的一部分,在这一部分中,该标识符是有定义的,可以被C编译和链接程序所识别。变量的作用域与其定义的语句在程序中出现的部位有直接关系。据此可以划分为局部变量和全局变量。
那么命名空间与作用域又有怎样的关联呢?
C语言中定义了三个层次的作用域:文件(编译单元)、函数和语句。C++又引入了类作用域,类是出现在文件内的。在不同的作用域内可以定义同名变量,互不干扰,便于系统区别他们。
在大型工程中,由于个头文件是由不同人设计的,有可能在不同的头文件中用了相同的名字来命名所定义的类或函数。此时在程序中就会出现命名冲突。为了解决这个问题,ANSI C++增加了命名空间。
命名空间
所谓的命名空间其实就是一个由程序设计者命名的内存空间。程序设计者可以根据需要指定一些有名字的空间作用域,把一些全局实体分别放在各个命名空间中,从而与其他全局实体分别开来。
简单来说,命名空间的作用就是解决命名冲突。
#include<iostream>
using namespace std;
int a=1;
namespace A
{
int a=2;
}
namespace B
{
int a=3;
}
int main()
{
cout<<a<<" "<<A::a<<" "<<B::a<<endl;
return 0;
}
二 输入输出流(简介)
1)数据输入输出的过程被成为流。 缓冲区中的数据就是流。
2)标准输入输出:从键盘输入数据,输出到显示器屏幕。简称标准I/O。
3)cout:标准输出流 <<:流插入运算符
cin:标准输入流 >>:流提取运算符
cerr/clog:标准错误流
在c++中输入输出流被定义为类,cout和cin是iostream类的对象。
三 重载(c++为什么支持重载)
函数重载:函数名相同,而参数个数、参数类型、参数顺序三者必须至少有一种不同。返回值类型可同可不同。
实现了一个函数名多用,将实现功能相同或相近的函数用同一个函数名来命名。
c++支持重载机制(为什么C++支持函数重载,而C语言不支持呢?)
从代码的编译到运行,在VC6.0或VS这种编译器下,它是系统直接完成了翻译与链接,直接生成了运行结果。
编译器内部完成了翻译部分:
1.预处理
1)头文件展开
2)宏的替换
3)去注释
4)条件编译
2.编译过程:将高级语言转为汇编语言
3.汇编过程:汇编语言转为二进制程序
链接部分:所引用的数据链接进来
比如一个函数的声明如下:
void function(int x,int y);
在c语言中,编译器在编译后在库中的名字为_function
在c++中,编译器在编译后在库中的名字为_function_int_int
还有一个函数的声明如下:
void function(float x,float y);
在c语言中,编译器在编译后在库中的名字为_function
在c++中,编译器在编译后在库中的名字为_function_float_float
在链接时,都是找名字进行链接的,就比如以上两个函数,
在C语言中两个的名字一样,就会在链接中报错。
C++中它们的名字不一样,所以就不会报错。
4. 既然c++ c语言的编译器有不同符号生成规则,如何相互链接?
c++提供c语言接口的话, `extern` “C”, 标示按照c语言的符号生成规则提供接口 。
四 c++缺省参数
全缺省参数
int ADD1(int a=0,int b=0)
{
return a+b;
}
半缺省参数
int ADD2(int a,int b=0)
{
return a+b;
}
测试
cout<<ADD1()<<endl;
cout<<ADD1(1)<<endl;
cout<<ADD1(1,1)<<endl;
cout<<ADD2(2)<<endl;
cout<<ADD2(2,2)<<endl;
输出结果
默认参数使用注意:
·只要出现默认参数,那之后的参数也一定要带默认值
·默认参数在声明和定义只能在一个地方出现
五 指针和引用(概念、使用方法、做参数、做返回值的作用,指针和引用的区别)
指针:变量的指针就是变量的地址,指针变量存放变量的地址。
引用:就是变量的别名。
引用的特点:
1)一个变量可取多个别名
2)引用必须初始化
3)引用只能在初始化时引用一次,不能改变为其他变量的应用
引用做参数
1)如果形参为引用,则形参是实参的别名
2)当不希望改变参数的值时,应当用const常引用
引用和指针的区别和联系
1)指针比引用更灵活,也更危险。使用指针时要进行判空,所指地址释放后要置0,防止野指针。
2)引用从一而终,指针可以改变。
3)引用必须指向有效的变量,而指针可以为空。
4)sizeof指针变量和引用变量意义不同,前者为指针大小,4/8个字节,后者为变量大小
5)指针和引用自增(++)和自减(--)意义不同。