C++(运算符重载)

运算符重载

为什么要有运算符重载?

        如果没有重载运算符,类的对象不能进行运算符操作
        本质是函数重载,函数名是以运算符的形式类命名,调用函数也是通过运算符来调用。

        p + p1; 左值调用运算符,运算符右侧为传进去的参数

定义

        (1)给运算符赋予新的含义,在类的内部定义的运算符重载和成员函数是一样的 
        (2)重载方法:定义一个重载运算符的函数,在需要执行被重载的运算符时,系统会自动调用

函数类型 operator 运算符名称(参数列表);
bool operator ==(const Person &s);

        this是运算符的左值,参数是运算符的右值

        

重载赋值运算符

        C++会对每个类默认重载赋值运算符,默认的逻辑是成员变量逐个赋值

        

        

结论:
        (1)用一个已经存在的对象给一个新的对象初始化,调用拷贝构造函数
        (2)两个都是已经存在的对象,调用赋值运算符重载函数

系统默认的赋值运算符

         

总结

        (1)必须重载和默认赋值运算符相同类型的参数(对象的引用),才能覆盖掉默认的赋值运算符;
        (2)自己重载了,系统的重载是否还在?
                系统的还在,因为我们重载的赋值运算符的参数和C++默认生成的不一样,所以不会覆盖掉默认赋值运算符的重载
        (3)赋值运算符是算浅拷贝,没有特殊需求,是不用覆盖系统默认的 

C++中默认存在的函数

        

++运算符重载

         

重载输出运算符<<

         

#include <iostream>
using namespace std;
class Person
{
	//istream  输入流   ostream  输出流 
	friend ostream &operator << (ostream &os, const Person &ob);
public:
	Person(int age):age(age){}
private:
	int age;
};
//必须是全局的
ostream &operator << (ostream &os, const Person &ob)
{
	os << ob.age;//私有的变量,要加友元
	return os;
}
int main(){
	Person per1(14);
	Person per2(18);
	cout << per1 << " " << per2 << endl;
 	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值