对返回引用函数的进一步解释

#include 
#include 
using namespace std;
class Box
{
public:
	Box(string name,int age):name(name),age(age){}
	string& getname()	//返回引用的函数
	{
		cout << "&name: " << (int)&name << endl;
		return this->name;
	}
	int& getage()		//返回引用的函数
	{
		cout << "&age: " << (int)&age << endl;
		return this->age;
	}
	void show()
	{
		cout << name << " " << age << endl;
	}
	void get_addr(Box &box1)
	{
		cout << "&box1: " << (int)&box1 << endl;
		cout << "&name: " << (int)&name << endl;
		cout << "&age: " << (int)&age << endl;
	}
protected:
	string name;
	int age;
};
int main()
{
	cout << "原始数据:" << endl;
	Box box1("李四", 30);
	box1.show();
	cout << endl;


//引用系列函数(可以这样理解:既返回了当前对象中的数据成员本身,又返回了数据成员的值,【总之可以通过返回引用修改对象的数据成员的值】)
	cout << "通过返回引用的函数进行修改当前对象的数据成员:" << endl;
	cout << "引用地址:" << endl;
	//修改当前对象中的全部数据成员的值
	box1.getname() = "张三";//返回的数据成员box1.name本身和其值【也即是box1.name="李四"】,然后对其进行赋值,也即相当于box1.name="张三"
	box1.getage() = 18;	//返回的是数据成员box1.age本身和其值【也即是box1.age=30】,然后对其进行赋值,也即相当于box1.age=18 
	box1.show();
	//修改当前对象中的指定数据成员的值
	box1.getage() = 99;
	box1.show();


//一般系列函数(和往常一样,返回的是只是当前对象中的值而已)(与max(1,2)......一样的)

	//cout << box1.getname() << endl;//(另外注意,string是变量,不要与C中的字符数组进行混淆)
	//cout << box1.getage() << endl;


//box1地址相关
	cout << endl;
	cout << "box1的相关地址:" << endl;
	box1.get_addr(box1);
	return 0;
}

//【通过返回函数的引用可以对当前对象进行修改】
//box1.getname() = "张三";//也即相当于box1.name="张三"
//其中getname是一个返回引用的函数,实际上返回的就是box1.name,然后给它赋值为“张三”!
//也即是通过引用改变了原来对象的数据!

//【作用】:
//通过返回引用的函数既可以对该对象的指定数据成员进行修改,也可以进行部分或全部修改!(对当前对象进行操作)
//其实上不必想的那么复杂,只需记住:通过返回引用可以修改当前对象的数据成员的值!

对返回引用函数的进一步解释_第1张图片

你可能感兴趣的:(C++,c++,算法,开发语言)