第11章运算符重载解析.pptVIP

  • 1
  • 0
  • 约4.91千字
  • 约 27页
  • 2016-10-28 发布于湖北
  • 举报
主讲:魏英 运算符重载 * 什么是运算符重载 问题举例——复数的运算 class complex { public: complex(double r=0.0,double i=0.0) {real=r; imag=i;} void display(); //显示复数的值 private: double real; double imag; } * 问题: 用“+”、“-”能实现复数的加减运算吗? 实现复数加减运算的方法 ——重载“+”、“-”运算符 运算符重载的实质——对已有的运算符赋予多重含义。 运算符重载的必要性——C++中定义的运算符其运算对象只能是基本数据类型,而不适用于用户自定义的类型。 不可以重载的运算符有: . .* :: ?: sizeof 什么是运算符重载 * 运算符重载的实现机制: 1)将制定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参。 2)编译系统对重载运算符的选择,遵循函数重载的选择原则。 什么是运算符重载 * 运算符重载的规则和限制: 1)只能重载C++语言中已有的运算符,不可臆造新的。 2)不可改变原运算符的优先级和结合性。 3)不能改变操作数的个数。 4)经重载的运算符,其操作数至少应该有一个是自定义类型。 什么是运算符重载 * 运算符重载的两种形式: 1)重载为类成员函数 2)重载为友元函数 什么是运算符重载 * 运算符函数 声明形式 函数类型 operator 运算符(形参) { …… } 重载为成员函数时 参数个数=原操作数个数-1 (后置++、--除外) 重载为友元函数时 参数个数=原操作数个数,且至少应该有一个自定义类型的形参。 * 运算符成员函数的设计 双目运算符B 如果要重载B为类成员函数,使之能够实现表达式oprd1 B oprd2,其中oprd1为A类对象,则B应被重载为A类的成员函数,形参类型应该是oprd2所属的类型。 经重载后,表达式oprd1 B oprd2相当于 oprd1.operator B(oprd2) 运算符重载为类成员函数 * 例:将“+”、“-”运算重载为复数类的成员函数。 规则:实部和虚部分别相加减。 操作数:两个操作数都是复数类对象。 class complex { public: complex(double r=0.0,double i=0.0) {real=r; imag=i;} complex operator +(complex c2); complex operator -(complex c2); void display(); private: double real; double imag; }; 运算符重载为类成员函数 * complex complex::operator +(complex c2) { complex c; c.real=c2.real+real; c.imag=c2.imag+imag; return c; } complex complex::operator -(complex c2) { complex c; c.real=real-c2.real; //顺序不能颠倒 c.imag=imag-c2.imag; return c; } 运算符重载为类成员函数 void complex::display() {cout(real,imagi)endl;} int main() { complex c1(5,4),c2(2,10),c3; cout“c1=”; c1.display(); cout“c2=”; c2.display(); c3=c1-c2; cout“c3=c1-c2=”; c3.display(); c3=c1+c2; cout“c3=c1+c2=”; c3.display(); return 0; } c1=(5,4i) c2=(2,10i) c3=c1-c2=(3,-6i) c3=c1+c2=(7,14i) 运算符重载为类成员

文档评论(0)

1亿VIP精品文档

相关文档