C++入门基础知识

来源:互联网 发布:淘宝网鞋子女鞋 编辑:程序博客网 时间:2024/05/26 20:24

C++入门

1.命名空间
在C++中,为了避免标识符的命名发生冲突,标准C++引入了关键字 namespace (命名空间),可以更好的控制标识符的作用域。
先看一个程序:

#include<iostream>using namespace std;int a = 10;namespace A{int a = 20;}namespace B{int a = 30;}namespace C{int a = 40;namespace D{int a = 50;}}int main(){cout<<a<<endl;      //访问全局变量std空间的a=10cout<<A::a<<endl;   //访问A空间内的a=20cout<<B::a<<endl;   //访问B空间内的a=30cout<<C::a<<endl;   //访问C空间内的a=40cout<<C::D::a<<endl;//访问C空间里嵌套D空间的a=50return 0;}
命名空间可以是全局的,也可以是一个命名空间嵌套一个命名空间,但不能位于类和代码块中。
作用:建立一些互相分割的作用域,把一些全局实体分割开来,解决名字冲突的问题。

2.C++基本输入输出流
(1)标准输入流对象cin
cin是标准的输入流对象,在程序中用于代表标准输入设备,通常指键盘。运算符“>>”表示从标准输入流对象cin读取数的数值传给右方指定的变量。cin必须与输入运算符“>>”一起使用。
下面代码展示输入一个变量:
cin>>a>>endl;
此时,用户从键盘输入的值会自动的转换为变量a的类型。
注:cin允许输入一连串的变量:
cin>>a>>b>>c>>d;
(2)标准输出流对象cout
cout是标准输出流对象,在程序中用于代表标准输出设备,通常指屏幕。运算符"<<",表示将右方变量的值写到标准输出流cout对象中
,即显示在屏幕上。cout必须与输出运算符"<<"一起使用。
下面展示输出一个变量:
cout<<a<<endl;
使用插入运算符时,可以把多个不同类型的数据组在一条语句中,也可以输出表达式的值。如下:
int a = 12;double b = 13;int c = a+b;cout<<a+b<<c<<endl;
3.重载
C++为什么支持重载呢?为什么C不可以重载?
在C++中,在同一个作用域中,函数名相同,函数参数类型不同或者参数个数不同,既可以构成重载。
看一个例子:
#include<iostream>using namespace std;int Add(int x,int y)  //C++编译后命名为_z3Addxy{                  int z = 0;z = x+y;return z;}int main(){int m = 0;m = Add(2,3);cout<<m<<endl;return 0;}
从上面的例子,我们可以看出C++对函数名字修饰规则跟函数名及函数参数都有关,而C对函数名没有这样的修饰规则;所以C++支持重载,而C不支持重载。
4.C++缺省参数
所谓缺省顾名思义就是在声明函数时的某个参数指定了默认值,在调用该函数的时候,如果想要使用默认值,就无需再指定该参数
。缺省参数使用规则:指定默认参数时,你只能从后往前开始指定,也就说,你想指定某个参数为默认值,往后的参数都需要指定默认值。即:带缺省值的参数必须放在参数表的最后面。
缺省参数分为:半缺省和全缺省。
#include<iostream>using namespace std;int Add(int x,int y=3) //半缺省 {                  int z = 0;z = x+y;return z;}int Sub(int x=2,int y=1)//全缺省{                  int z = 0;z = x-y;return z;}int main(){int m = 0;int n = 0;m = Sub();n = Add(6);cout<<m<<n<<endl;return 0;}
5.指针和引用(区别和联系)
(1)指针是个是个实体,而引用只是个别名。
(2)引用只能在初始化的时候引用一次,之后不能改变为再引用其他变量;而指针还可以再改变它的指向。
(3)引用必须指向有效的变量,而指针可以为空指针。
(4)sizeof "引用"得到的是指向变量的大小;sizeof"指针"对象地址的大小。
(5)指针和饮用的自增(++)自减(- -)运算意义不一样。
(6)相对而言,引用比指针更安全。

先看一段代码:
#include<iostream>using namespace std;void fun(int* &p)    //用引用做参数// void fun(int** p) //用指针做参数{p=(int*)malloc(4);// *p=(int*)malloc(4);}int main(){int *ptr = 0;fun(ptr);*ptr = 10;return 0;}

上述代码展示可以看到,用指针做参数和用引用做参数,同样都可以达到效果使得ptr申请到内存,从而使得被复制赋值合法。
这类通过指针接收参数叫指针传递;通过引用做参数的叫做引用传递,即引用是实参的别名。

注:(1)不要返回临时变量的引用。
       (2)若返回对象出了当前函数的作用域依旧存在,则最好使用引用,这样做更高效。