赋值函数(运算符重载)(2)

1.参数使用引用是为了增加效率,因为如果不是引用,参数为对象则会调用拷贝构造函数
2.函数具有返回值是为了,若有连等赋值,保证其正常赋值
3.判断语句是为了保证不会出现自己给自己赋值的情况
4.返回值为引用是为了提升效率
赋值函数表面看起来只是对象赋值给对象,实际上是=号前的对象调用operator=方法,赋值函数的参数即为
=号后的对象

void main()
{
    ST t(10,20);
    ST t1;
    t1 = t;    //这里原理应该是 t1.operator=(&t)
}

当类中没有声明明确的赋值函数时,C++会提供一个默认的赋值函数,其作用仅仅是将私有数据成员进行赋值。

//Test1.h
#include<iostream>
using namespace std;
class ST
{
private:
	int a;
	double b;
public:
	ST(int a=0,double b=0):a(a),b(b)
	{
		this->a = a;
		this->b = b;
		cout<<"Object was built. "<<this<<endl;
	}
	ST(const ST &t);//拷贝构造
	ST& operator=(const ST &t);
	~ST()
	{
		cout<<"Object was free. "<<this<<endl;
	}
};

ST::ST(const ST &t)
{
	this->a = t.a;
	this->b = t.b;
	cout<<"Object was copy. "<<this<<endl;
}
//在类外实现方法时:	返回值 类名 ::函数名(参数)
ST& ST::operator=(const ST &t)
{
	if(this != &t)
	{
		this->a = t.a;
		this->b = t.b;
	}
	return *this;
}

  

#include<iostream>
#include"Test1.h"
using namespace std;
void main()
{
	ST t(10,20);
	ST t1;
	t1 = t;
}

  运行结果

posted @ 2019-01-27 00:26  C_hp  阅读(260)  评论(0编辑  收藏  举报