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=10
cout<<A::a<<endl; //访问A空间内的a=20
cout<<B::a<<endl; //访问B空间内的a=30
cout<<C::a<<endl; //访问C空间内的a=40
cout<<C::D::a<<endl;//访问C空间里嵌套D空间的a=50
return 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;3.重载
double b = 13;
int c = a+b;
cout<<a+b<<c<<endl;
C++为什么支持重载呢?为什么C不可以重载? 在C++中,在同一个作用域中,函数名相同,函数参数类型不同或者参数个数不同,既可以构成重载。 看一个例子:
#include<iostream>从上面的例子,我们可以看出C++对函数名字修饰规则跟函数名及函数参数都有关,而C对函数名没有这样的修饰规则;所以C++支持重载,而C不支持重载。 4.C++缺省参数 所谓缺省顾名思义就是在声明函数时的某个参数指定了默认值,在调用该函数的时候,如果想要使用默认值,就无需再指定该参数
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;
}
。缺省参数使用规则:指定默认参数时,你只能从后往前开始指定,也就说,你想指定某个参数为默认值,往后的参数都需要指定默认值。即:带缺省值的参数必须放在参数表的最后面。 缺省参数分为:半缺省和全缺省。
#include<iostream>5.指针和引用(区别和联系)
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;
}
(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)若返回对象出了当前函数的作用域依旧存在,则最好使用引用,这样做更高效。