C++基础进阶:
引用:相当于给某一变量或者实体类取一个别名,直接拿别名来进行操作。
基本类型引用:
int a = 10;
int &b = a;//给a定义一个别名 b
cout << a << endl;
b = 20;
cout << a << endl;
a = 30;
cout << b << endl;
结构体引用:
typedef struct
{
int x;
int y;
}strcod;
strcod c;
strcod &c1 = c;
c1.x = 20;
c1.y = 30;
cout << "c.x:" << c.x << ",c.y:" << c.y << endl;
指针类型的引用
//类型 *&指针引用名 = 指针
int a = 3;
int *p = &a;
int *&q = p;
cout << a << endl;
*p = 10;
cout << a << endl;
*q = 20;
cout << a << endl;
例子:用引用来实现两变量交换值
/*交换位置*/
void fun(int &a,int &b) {
int c = 0;
c = a;
a = b;
b = c;
}
int x = 10;
int y = 20;
cout << x<<"---"<< y << endl;
fun(x, y);
cout << x << "---" << y << endl;
const修饰:
基本类型:
//const int x = 3;
//x = 5;//错误,以为上面已经将x定义为常量了,不能在对其值进行更改
指针类型:
int x = 3;
int y = 4;
//int const *p = &x;//等价于 const int *p = &x;
//*p = 5;//错误,这个时候*p是常量,不能给常量赋值
//x = 5;//是对的
int *const p = &x;
//p = &y;//是错误的,这个写法,p被定义为常量不能进行赋值
*p = 10;//p是常量不能赋值,这样*p是可以赋值的
cout << x << endl;
const对方法形参进行修饰(避避传入的参数被误修改)
void fun(const int &a, const int &b) {
//以为a和b都是被const修饰的了,是属于一个常量了,不能在对其进行赋值操作
/*a = 10;
b = 20;*/
}
int x = 5;
int y = 8;
fun(x,y);
C++函数的新特性:
void fun(int a, int b = 10, int c=20);
//void fun(int a, int b = 10,in c);//错误,c++中在声明函数时可以给默认值,但是默认值必须是在参数表的右端,
//如b = 10赋默认值了,c就必须要赋初值。否则编译不通过
//赋初值,可以在函数声明时赋值,但是不能在函数实现时赋值(这个时候赋值有些编译器不能通过)
//无实参时(什么值都不给),就用函数的默认值,有实参时,就覆盖默认值
void fun(int a,int b,int c) {
cout << a << b << c << endl;
}
函数的重载:
在同一作用域内,用同一函数名定义的函数,参数个数或参数类型不同。
内联函数:关键字inline
效率比较高。
inline void getMax();
逻辑简单,调用频繁的函数建议适用内联函数。
递归函数无法使用内联函数
C++内存管理:
申请内存:new
释放内存:delete
int *p = new int;//申请内存
int *p = new int[10]//申请内存块
delete p;
delete []p;
申请内存要判断一下是否申请成功,释放的时候要把指针置为null,
new 和delete要配套使用
int *p = new int[10];
if( null == p){
//处理异常
}
delete []p;
p=null;