前言
运算符重载是编译器提供给用户自定义的一种更方便的工作方式
定义
其实就是重新定义一些运算符的意思的,比如是让加法可以在类之间进行,当然我们要使用到关键字operator,话不多说,直接上代码
class Stu
{
public:
friend Stu operator+ (Stu &a,Stu &b);
Stu (int a=0,int b=0)
{
this ->a =a;
this ->b =b;
}
void prt()
{
cout<<"a="<<a<<" b="<<b<<endl;
}
public:
int a;
int b;
};
Stu operator+ (Stu &a,Stu &b) //其实本质就是一个函数,通过重定
义的方式让他使用简单
{
Stu c(a.a+b.a,a.b+b.b);
return c;
}
Stu add (Stu &a,Stu &b)
{
Stu c(a.a+b.a,a.b+b.b);
return c;
}
int main(int argc, char *argv[])
{
Stu a(1,2),b(3,4);
Stu c=add (a,b);//本质是一个函数,当然也可以这样调用
Stu c =a+b;
// Stu c=a.operator+ (b);
c.prt();
return 0;
}
类的属性为私用的时候
你如果阅读上面的代码你就会发现,在这里面,属性必须是公有的,不然外界不能访问,这时候我们就可以用到我们的友元函数了
class Stu
{
public:
friend Stu operator+ (Stu &a,Stu &b); //定义他为友元函数,就可以访问他私有额的数据了
Stu (int a=0,int b=0)
{
this ->a =a;
this ->b =b;
}
void prt()
{
cout<<"a="<<a<<" b="<<b<<endl;
}
/*
Stu operator+ (Stu &b) //当然,你也可以写一个成员函数
{
Stu c(this ->a+b.a,this ->b+b.b);
return c;
}
*/
public:
private:
int a;
int b;
};
Stu operator+ (Stu &a,Stu &b)
{
Stu c(a.a+b.a,a.b+b.b);
return c;
}
int main(int argc, char *argv[])
{
Stu a(1,2),b(3,4);
Stu c =a+b;
// Stu c=a.operator+ (b);
c.prt();
return 0;
}
友元函数 重载 << >>操作符
stream 和 ostream 是 C++ 的预定义流类
- cin 是 istream 的对象,cout 是 ostream 的对象
- 运算符 << 由ostream 重载为插入操作,用于输出基本类型数据
- 运算符 >> 由 istream 重载为提取操作,用于输入基本类型数据 用友员函数重载
- << 和 >> ,输出和输入用户自定义的数据类型
class Stu
{
public:
friend istream& operator>> (istream &p,Stu &b);//定义为友元可以访问私有成员
friend ostream& operator<< (ostream &p,Stu &b);
Stu (int a=0,int b=0)
{
this ->a =a;
this ->b =b;
}
void prt()
{
cout<<"a="<<a<<" b="<<b<<endl;
}
private:
int a;
int b;
};
ostream& operator<< (ostream &p,Stu &b) //cout的实现,返回值要使用ostream的实现链式操作
{
p <<"nihao"<<b.a;
return p;
}
istream& operator>> (istream &p,Stu &b) //和上面同理
{
p >>b.a;
}
int main(int argc, char *argv[])
{
Stu a(1,2),b(3,4);
// Stu c=add (a,b);
// cout<<a<<" wohenhao"<<endl;
cin>>a;
a.prt();
// Stu c=a.operator+ (b);
return 0;
}