c++运算符重载

1.+号运算符重载

什么时候返回值用对象,什么时候用对象?

答:返回值是函数内部的临时对象时候不返回引用,因为引用只是将该临时对象的别名进行了返回,当函数结束时候,对象自动销毁,所以引用就是也指针。

1.1成员函数重载

//返回Person发生拷贝构造函数,这个时候局部变量p3销毁后,拷贝到的另外一个对象不受影响。
    Person operator+(const Person& p)   //*this+p
    {
        Person p3;
        p3.age = this->age + p.age;
        return p3;
    }

调用:

 p1.operator(p2);//调用方式1
 
 p1+p2;//调用方式2

1.2.全局函数重载

Person operator+ (const Person& p1, const Person& p2)
{
	Person p3;
	p3.age = p1.age + p2.age;
	return p3;
}

调用:

operator+(p1,p2);//调用方式1
 
 p1+p2;//调用方式2

2.<<运算符重载(不能进行成员函数重载)

2.1<< 左移运算符不能进行成员函数重载 因为重载后会变为p.operator(ostream& cout)    <=>p<<cout ,而不是cout<<p;

//左移运算符
//链式编程返回引用
ostream& operator<<(ostream& out, const Person& p)
{
    out << p.age;
    return out;      //返回引用,(别名,链式编程)
}

调用:

cout<<p<<endl;

3.++运算符重载

3.1前++

	//前置++
	Person& operator++()
	{
		++this->age;      //先++
		return *this;     //后返回本身(引用)
	}

调用:

Person p1 = Person(18,"张雨城");
++p1;

3.2后++

      //后置
	Person operator++(int)
	{
		//
		Person temp = *this;        //创建临时对象
		this->age++;
		//返回局部对象,这个时候将返回值的类型设置为Person类型,这个时候会发生拷贝构造函数,此临时对象销毁后不会影响到另外一个对象,
        //如果返回引用类型(引用的是局部变量,这个时候函数执行完成销毁对象,别名就指向野指针了。)
		return temp;                

	}

调用:

Person p1 = Person(18,"张雨城");
p1++;

 
4.赋值运算符

	//赋值运算符重载
	Person& operator=(const Person& p)
	{
		//如果原来的ptr_name不为空先释放内存
		if (ptr_name != NULL)
		{
			delete ptr_name;
			ptr_name = NULL;
		}
		this->age = p.age;
		//开一个新的内存
		this->ptr_name = new string(*p.ptr_name);

		return *this;

		
	}

调用:

Person p1 = Person(18,"张雨城");
Person p2 = p1;

5.==运算符重载

下面为成员函数重载

//  ==运算符重载(成员函数,也可以全局函数重载)
	bool operator== (const Person& p)const
	{
		if (*this->ptr_name == *p.ptr_name && this->age == p.age)
		{
			return true;
		}
		return false;
	}
	

6.()运算符重载

下面为成员函数重载()的方式

	void operator() (string test)
	{
		cout << test << endl;
	}

调用:

    //匿名对象调用仿函数
	Person()("测试仿函数");

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值