引用,this指针,引用和指针的区别

一,引用

#ifdef __cplusplus//c++
  cout<<"a= "<<a<<endl;//c++的方式
#else
printf("a=%d\n",a);//c语言的方式
const int a=10;
int b=0;
int *p=(int*)&a;//OK
int*s=const_cast<int*>(&a);//去常性强转(写的比较丑陋容易引起注意)底层还是又上一行代码实现的只是足够丑陋
const int a=10;
const int&b=a;//ok
int&c=(int&)a;//不知道

引用和const

在这里插入图片描述
在这里插入图片描述

二,引用和指针有什么样的区别?

引用在语法层次上来看引用就是一个变量的别名,相当于给一个实体起来两个名字;
从底层来看引用相当于一个自身为常性的指针;
在这里插入图片描述

//引用再编程方面的看法
//引用在汇编层面的看法
int fun()
{
	int a = 10;
	return a;
}
int& funref()
{
	int a = 20;
	return a;
}
int main()
{
	int x = fun();//返回一个将亡值赋值给x
	int y = funref();
	/*如果函数的返回值的生存期不受函数生存期
	的影响就可以
	1,加static
	2,全局变量
	3,int& fun(int& x)//以引用进的可以以引用出
	{
	return x;
	}
	*/
	/*int& funref()相当于
	int*constfunref()
	{
	 int a=20;
	 return &a;//返回的是a的地址这样y接收到的是一个已经回收的地址里面的值
	 至于是否正确很难说(错误的方法)函数结束后分的空间就会回收
	}*/
	int& z = funref();
	cout << x << " " << y <<" "<<z<< endl;
	return 0;
}

处理构造函数和拷贝构造函数以外其他的函数不可以使用初始化列表来赋值
在这里插入图片描述

class Rectangle
{
private:
	int left, top, right, bottom;
public:
	Rectangle(int e=0, int t=0, int r=0, int b=0) :left(e), top(t), right(r), bottom(b)
	{}
	void SetLeft(int e) { left = e; }
	void SetTop(int t) { top = t; }
	void SetRight(int r) { right = r; }
	void SetBottom(int b) { bottom = b; }
	
	int GetLeft() const { return left; }//定义成常性,常性的对象和非常性的对象都可以调用
	int GetTop() const { return top; }
	int GetRight() const { return right; }
	int GetBottom() const { return bottom; }
	
	
	void show()const
	{
		cout << "left-top point is(" << left << "," << top <<":"")" << endl;
		cout << "right-bottom point is(" << right << "," << bottom << ":"")" << endl;
	}
};


int main()
{
	Rectangle r1;
	Rectangle r2(1, 1, 20, 20);
	const Rectangle& r = r2;
	r.GetLeft();
	return 0;
}

函数重载是一种特殊情况,C++允许在同一作用域中声明几个类似的同名函数,这些同名函数的形参列表(参数个数,类型,顺序)必须不同,常用来处理实现功能类似数据类型不同的问题。

双向函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值