#include<iostream>
namespace space
{
//定义变量
int rand = 10;
char time = 20;
//定义函数
int add(int a, int b)
{
return a + b;
}
//定义结构体
struct student
{
char name[20];
char sex[6];
int age;
};
}
int main()
{
return 0;
}
#include<iostream>
using namespace std;
namespace b
{
int test(int x, int y)
{
return x + y;
}
}
using b::test;
int main()
{
int m = test(1, 5);
cout << m;
return 0;
}
(3)命名空间的嵌套
cpp复制代码
#include<iostream>
using namespace std;
namespace a
{
int test(int x, int y)
{
return x + y;
}
namespace b
{
int test(int x, int y)
{
return x * y;
}
}
}
int main()
{
int m = a::test(2, 3);
int n = a::b::test(2, 3);
cout << m << " " << n;
return 0;
}
#include<iostream>
using namespace std;
int test(int x = 2, int y = 6)
{
return x + y;
}
//如果调用这个函数但是不传递参数,那么返回结果就是8,同样如果掺入参数1和2,那么返回结果就是3
2.几个注意:
(1)缺省参数必须从右往左给,比如上面的程序,我们只给x缺省参数但不给y缺省参数这样其实是不合法的
(2)函数实参一定是从左往右给函数的
(3)函数声明和定义分离时,不能在声明和定义中同时给缺省值
cpp复制代码
#include<iostream>
using namespace std;
int test(int x = 1, int y = 2);
int main()
{
int a = test();
cout << a;
return 0;
}
int test(int x = 1, int y = 2)
{
return x + y;
}
//比如这样同时个给缺省值的函数是不合法的,一般只在声明中给缺省值
四.函数重载
1.定义与使用:
即重名函数可以通过识别传入的参数类型来自动选择相对应的函数,例如:
cpp复制代码
#include<iostream>
using namespace std;
int test(int x , int y )
{
return x + y;
}
double test(double x, double y)
{
return x + y;
}
int main()
{
double x = 1.5, y = 2.8;
int a = test(1,2);
double b = test(x, y);
cout << a <<" "<< b ;
return 0;
}
#include<iostream>
using namespace std;
int main()
{
int a = 30;
//一个变量可以取多个别名
int& b = a;//给a变量取别名
int& c = a;//c也是a的别名
int& d = b;//给b变量取别名,相当于d也是a的别名
cout << &a << endl << &b << endl << &c << endl << &d << endl;
//从地址中也可以看出来a,b,c,d占用同一块内存空间
return 0;
}
当然,引用相对指针是非常方便好理解的,我举个例子:
cpp复制代码
#include<iostream>
using namespace std;
//传址调用,指针
void swap(int* a, int* b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
//引用
void swap(int& a, int& b)//函数重载
{
int tmp = a;
a = b;
b = tmp;
}
int main()
{
int a = 10;
int b = 20;
swap(a, b);
swap(a, b);
return 0;
}
2.引用的特性:
(1)引用必须在定义时初始化。比如int& a=0;这句代码其实是不合法的
(在 C++ 中,引用必须在定义时初始化,这意味着当声明一个引用变量时,必须立即将其绑定到一个已存在的对象(变量、常量或表达式的结果),与普通变量不同,普通变量可以在后续赋值时初始化)
(2)一个变量可以有多个引用
(3)引用一旦引用一个实体,再不能引用其他实体
举个栗子:
cpp复制代码
#include<iostream>
using namespace std;
int main()
{
int a = 10;
int& b = a;
int c = 20;
b = c;
cout << &a <<" "<< &b <<" "<< &c << endl;
cout << a <<" "<< b <<" "<< c << endl;
return 0;
}
//这里进行了b=c的操作,只是把c的值赋值给了b,但并没有改变b的引用实体,因此a和b地址是相同的
3.引用的使用(区别传值返回和传引用返回):
引用在实践中主要是于引用传参和引用做返回值中减少拷贝提高效率和改变引用对象时同时改变被 引用对象
引用传参介绍过了,然后我们看一下引用做返回值(即传引用返回)与传值返回区别
cpp复制代码
int STTop(ST& rs)//注意这里是传值返回(因为返回类型是int二百元引用类型的int&)
{
assert(rs.top > 0);
return rs.a[rs.top];
}
int main()
{
ST st1;
STInit(st1);
STPush(st1, 1);//入栈
STPush(st1, 2);
STTop(st1)+=10;
return 0;
}
#include<iostream>
using namespace std;
int main()
{
const int a = 10;//只可读
//int& b = a;
//发生错误,b可读可写,权限变大
//应加上const
const int& b = a;
int c = 20;
const int& d = c;//权限缩小,可以
c++;
//d++不可以;c可以改变,d不可以
return 0;
}