C++入门篇
一.命名空间
1.命名空间一namespace开始,后面跟命名空间的名字
2.命名空间的名字在其所在作用域中是唯一的,命名控件可以在全局作用域或者其它作用域内部定义,但是不能在函数或者类的内部定义。
3.每一个命名空间都是一个作用域
①命名空间中的每个名字必须引用该命名空间中的唯一实体,命名空间中的实体称为命名空间的成员,不同命名空间的成员可以具有相同的名字。
②命名空间内部各成员之间可以直接访问,外部的代码必须指出所引用成员名字定义在哪个命名空间中。
命名空间优秀博客连接:http://blog.chinaunix.net/uid-26404477-id-3088450.html
二.函数的重载
在同一作用域类,一组函数的函数名相同,参数列表不同(个数不同/类型不同),返回值可同可不同。
三.引用
1.引用对比于值传递、和传指针:
#include<iostream>
using namespace std;
void fun1(int a,int b)//值传递
{
int temmp=a;
a=b;
b=a;
}
void fun2(int& a,int& b)//引用
{
int temp=a;
a=b;
b=temp;
}
void fun3(int* a,int* b)//传指针操作
{
int* temp=a;
a=b;
b=temp;
}
int main()
{
int a = 9;
int b = 10;
fun1(a,b);
printf("%d %d\n",a,b);
std::cout<<a<<" "<<b<<endl;
fun2(a,b);
printf("%d %d\n",a,b);
std::cout<<a<<" "<<b<<endl;
fun3(&a,&b);
printf("%d %d\n",a,b);
std::cout<<a<<" "<<b<<endl;
}
1.①:传值操作并不能对实参进行改变,因为形参是实参的临时拷贝,而且随着栈帧的销毁形参也会被销毁。②:指针可以直接访问实参的地址对其进行操作,可以通过指针来改变实参。③:引用是实参的不别名,可以说直接就是实参,那么就可以直接对操作进行。
2.引用和指针比较和区别
1. 引用只能在定义时初始化一次,之后不能改变指向其它变量(从一而终);指针变量的值可变。
2. 引用必须指向有效的变量,指针可以为空。
3. sizeof指针对象和引用对象的意义不一样。sizeof引用得到的是所指向的变量的大小,而sizeof指针是对象地址的大小。
4. 指针和引用自增(++)自减(–)意义不一样。
5. 相对而言,引用比指针更安全。
总结一下:
指针比引用更灵活,但是也更危险。使用指针时一定要注意检查指针是否为空。指针所指的地址释放以后最好置0,否则可能存在野指针问题。
void Swap (int& l, int& r)
{
int temp = l;
l = r;
r = temp;
}
void Test()
{
int* p = 0;;//当p=0,其实它是一个空指针
int& a = *p;//在这里是引用一个空指针,所以走到Swap函数时会出问题
//int c = 5
//int* p = &c;
//int& a = *p;
int b = 2;
Swap (a, b);
std::cout<<a<<" "<<b<<endl;
}
int main()
{
Test();
return 0;
}
四.C++省缺参数
“`
int add(int a=0,int b=0)//全缺省
{
return a+b;
}
int add1(int a,int b=0)//半缺省,不能接受0个参数
{
return a+b;
}
int main()
{
int i = 0;
i=add(1,2);
printf(“%d\n”,i);
i=add(1);
printf(“%d\n”,i);
i=add();
printf(“%d\n”,i);
i=add1(1,2);
printf(“%d\n”,i);
i=add1(1);
printf(“%d\n”,i);
return 0;
}