//给变量起别的名字int a =10;int& b = a;//数据类型&别名 = 原名;//引用必须先初始化,一但初始化后,就不可以更改//引用作传参//作用:可以用形参改变实参//可以用指针修改//值传递voidexchange(int* a ,int* b){int tmp;
tmp =*a ;
b*= tmp;
a*=*b;}//引用传递voidswap(int& a ,int& b){int tmp = a ;
a = b;
b = tmp;}//swap(a,b) -> 改变成功;//引用作函数返回值//不要返回局部变量的引用,函数调用可以作为左值的存在int&test(){staticint a =10;//全局区上的数据在程序结束后系统释放return a;}test()=10086;//返回值2就改为10086//引用的本质:内部实现就是一个指针常量
指针
constint* p =&a;//const 修饰的是指针 ,指针的指向可以修改,指针指向的值不可以修改int* cosnt p =& a;// const 修饰的是常量 , 指针的指向不可以修改 , 指针的值可以修改
new操作符
//new返回的是该数据类型的指针int* p =newint(num);//num是变量delete p;//new 开辟数组int* array =newint[num];delete[] array;
构造函数和析构函数
classt{private:int a;public:t(int aa){a = aa};~t(){}};//拷贝构造classpe{private:int xxx;public:pe(const pe &p )//const修饰避免拷贝对象被改变{
xxx = p.xxx;}};//拷贝构造函数调用//1.使用一个已经创建完毕的对象来初始化一个新对象//2.值传递的方式给函数参数传值//3.以值的方式返回局部对象//类默认的三个函数 : 1.默认构造函数(无参) 2.默认析构函数(无参) 3.默认拷贝构造函数//若有有参构造则不提供无参构造,但提供拷贝构造//若有拷贝构造,则无其他构造函数//深拷贝 : 简单的赋值拷贝操作//浅拷贝 : 在堆区重新申请空间进行拷贝操作(new)申请pe(const pe & p){
age = p.age;
pointer =newint(*p.pointer);//(int * pointer;)}~pe(){if(pointer !=NULL){delete pointer;
pointer =NULL;}}//初始化列表pe(int aa ,int bb ,int cc):a(aa),b(bb),c(cc){}
//加号运算符重载
person operator+(person & pp , person & p){
person tmp;
temp.a = pp.a + p.a;
temp.b = pp.b + p.b;return tmp;}//全局函数重载classperson{public:int a ,int b;
person operator+(person & p){
person tmp;
temp.a =this-> a + p.a;
temp.b =this-> b + p.b;return tmp;}};
//左移运算符重载 <<
ostream &operator<<(ostream & cout , p){
cout << p.a << p.b;return cout;}classperson{friend ostream &operator<<(ostream & cout , p)public:person(int aa ,int bb ){
a = aa , b = bb;}private:int a ,int b;//不利用成员函数重载<<运算符,因为无法实现cout在左侧};intmain(){int a , b;
cin >> a >> b;
person p(a,b);
cout << p;return0;}
//递增运算符重载classmint{public:mint(){
num =0;}//前置递增
mint &operator++()//为了一直对一个数据进行操作{
num++;return*this;//将自身作返回}//后置递增
mint operator++(int)//为了一直对一个数据进行操作{//先记录结果
mint tmp =*this;//后递增
num++;//最后记录结果作返回return*this;}private:int num;};
赋值运算符
classperson{public:person(int a){
age =newint(a);}int* age;}