复习五 运算符重载(改)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1
6.1 运算符重载的规则
算符重载就是赋予已有的运算符多重含义 运算符重载就是赋予已有的运算符多重含义。 例如: 例如:a=3+4; ; a=”abc”+”def”; 同一个运算符“+”,由于所操作的数据类型不 同一个运算符“ 同而具有不同的意义,这就是运算符重载。 同而具有不同的意义,这就是运算符重载。 运算符重载是C++的一项强大功能。通过重载, 运算符重载是 的一项强大功能。通过重载, 的一项强大功能 可以扩展C++运算符的功能,使它们能够操作用户 运算符的功能, 可以扩展 运算符的功能 自定义的数据类型, 自定义的数据类型,增加程序代码的直观性和可读 性
5
void main(void){ Complex c1(1,2),c2(3,4),c3,c4,; c3=c1+c2; c4=c1-c2; } c1+c2被解释为:operator+(c1,c2) 被解释为: 被解释为 c1-c2被解释为: operator-(c1,c2) 被解释为: 被解释为
6
cout<<r;
if (i>0) cout<<"+"; If (i!=0) cout<<i<<"i"<<endl; }
void main(void) { Complex c1(1,2),c2(3,4),c3,c4,; c3=c1+c2; C++会将它们转换成下面形式的调用 会将它们转换成下面形式的调用 c4=c1-c2; 语句: 语句: c1.display(); // 1+2i c3=c1.operator+(c2); c2.display(); // 3+4i c4=c1.operator –(c2); c3.display(); // 4+6i c4.display();} // -2-2i
2
6.2 运算符重载的形式
6.2.1 6.2.2 6.2.3 用成员函数重载运算符 用友员函数重载运算符 两种运算符重载形式的比较
3
6.2.1 用成员函数重载运算符
用成员函数重载运算符: 用成员函数重载运算符: 返回值类型〉operator〈运算符〉 形式参数表〉 〈返回值类型〉operator〈运算符〉(〈形式参数表〉) <返回类型> 可以为任何有效类型,但通常返回它们 返回类型> 可以为任何有效类型, 操作类的对象。 操作类的对象。 运算符〉为要重载的运算符, 形式参数表〉 〈运算符〉为要重载的运算符,〈形式参数表〉中的 参数个数与重载的运算符操作数的个数有关。 参数个数与重载的运算符操作数的个数有关。 以类成员形式重载的运算符参数比实际参数少一个, 以类成员形式重载的运算符参数比实际参数少一个, 个参数是以this指针隐式传递的。 this指针隐式传递的 第1个参数是以this指针隐式传递的。
6.3.2 双目运算符重载
复数的二 【例6.3】用成员函数重载运算符,实现复数的二 6.3】用成员函数重载运算符,实现复数 元加法、减法运算。 元加法、减法运算。
class Complex { private: double r, i; public: Complex (double R=0, double I=0):r(R), i(I){ }; Complex operator+(Complex b); Complex operator- (Complex b); void display(); };
8
6.3.2 双目运算符重载
6.3】用友员函数重载运算符,实现复数 【例6.3】用友员函数重载运算符,实现复数 的二元加法、减法运算。 的二元加法、减法运算。
class Complex { private: double r, i; public: Complex (double R=0, double I=0):r(R), i(I){ }; friend Complex operator+(Complex a,Complex b); friend Complex operator-(Complex a,Complex b); void display(); };
Complex operator+(Complex a,Complex b) {return Complex(a.r+b.r,a.i+b.i);} Complex operator-(Complex a,Complex b) {return Complex(a.r-b.r,a.i-b.i);} void Complex::display() { cout<<r; if (i>0) cout<<"+"; If (i!=0) cout<<i<<"i"<<endl; } void main(void) { Complex C++会将它们转换成下面的调用语 会将它们转换成下面的调用语 c1(1,2),c2(3,4),c3,c4,; 句: c3=c1+c2; c3=operator+(c1,c2); , c4=c1-c2; c4=operator –(c1,c2); , c1.display(); // 1+2i c2.display(); // 3+4i c3.display(); // 4+6i c4.display();} // -2-2i
7
Complex Complex::operator +(Complex b) {return Complex(r+b.r,i+b.i);} Complex Complex::operator -(Complex b) {return Complex(r-b.r,i-b.i);} void Complex::display() {
4Hale Waihona Puke 6.2.2 用友员函数重载运算符
用友员函数重载运算符的原型为: 2.用友员函数重载运算符的原型为:
friend 〈返回值类型〉operator〈运算符〉(〈形式参数表〉) 返回值类型〉 形式参数表〉 〈运算符〉 友员函数重载运算符需要的参数的个数和操作数的个数一样多! 友员函数重载运算符需要的参数的个数和操作数的个数一样多 重载二元运算符为类的友元函数时需要两个参数,其形式: 重载二元运算符为类的友元函数时需要两个参数,其形式: class X{ …… friend X operator+ (X a,X b); } X operator+ (X a,X b){ ……}
9
10
6.4 赋值运算符重载
6.4.1 6.4.2 6.4.3 6.4.4 别 浅拷贝与深拷贝 重载赋值运算符的格式 重载赋值运算符函数的返回值 赋值运算符重载函数与拷贝构造函数的区
相关文档
最新文档