C++起航进阶

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定义为常量了,不能在对其值进行更改

指针类型:

扫描二维码关注公众号,回复: 5107063 查看本文章
        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;

    

猜你喜欢

转载自blog.csdn.net/u014231961/article/details/79581890
今日推荐