天天看点

初识C++你需要知道的那些基础

一 命名空间

提起命名空间这个概念我们不得不提起另一个概念——作用域。

       作用域——每个用户命名的标识符都有一个有效的作用域,所谓的“作用域”就是指程序中的一部分,在这一部分中,该标识符是有定义的,可以被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;
}



           
初识C++你需要知道的那些基础
初识C++你需要知道的那些基础

二  输入输出流(简介)

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;           

输出结果

初识C++你需要知道的那些基础

默认参数使用注意:

·只要出现默认参数,那之后的参数也一定要带默认值

·默认参数在声明和定义只能在一个地方出现

五    指针和引用(概念、使用方法、做参数、做返回值的作用,指针和引用的区别)

指针:变量的指针就是变量的地址,指针变量存放变量的地址。

引用:就是变量的别名。

引用的特点:

1)一个变量可取多个别名

2)引用必须初始化

3)引用只能在初始化时引用一次,不能改变为其他变量的应用

引用做参数

1)如果形参为引用,则形参是实参的别名

2)当不希望改变参数的值时,应当用const常引用

引用和指针的区别和联系

1)指针比引用更灵活,也更危险。使用指针时要进行判空,所指地址释放后要置0,防止野指针。

2)引用从一而终,指针可以改变。

3)引用必须指向有效的变量,而指针可以为空。

4)sizeof指针变量和引用变量意义不同,前者为指针大小,4/8个字节,后者为变量大小

5)指针和引用自增(++)和自减(--)意义不同。

继续阅读