
c6自定义类型的运算1.ppt
25页第六章 自定义类型的运算沈阳工程学院 刘晓慧C++语言程序设计C++语言程序设计沈阳工程学院2本节主要内容l用函数实现对象的运算l运算符重载函数C++语言程序设计沈阳工程学院3l教学目的:1.了解利用成员函数和友元函数对类对象进行运 算的方法;2.理解运算符重载的概念、意义和原则;3.掌握运算符重载为类的成员函数和友元函数方法 及调用运算符重载函数的方法l重点: 1.运算符重载的概念和意义;2.运算符重载的方法l难点: 1.运算符重载的方法l教具:ppt课件、多媒体教学软件l教学过程:问题引入、内容讲解、练习、小结C++语言程序设计沈阳工程学院46.1 用函数实现对象的运算l对于用户自定义的数据类型,有时需要对数据进行某种运算等 操作,而系统只对基本数据类型提供了运算规则,无法完成复 杂数据的运算,因此需要我们自己定义运算规则,定义方法有 两种:一是通过定义函数对复杂数据进行运算规则限制;二是 对现有运算符进行修改,即运算符重载l采用函数进行运算规则定义时可将函数定义为类成员函数或友 元函数成员函数实现运算的优点是:函数中可方便地访问对 象中的私有成员且保证数据安全用函数实现对象的运算C++语言程序设计沈阳工程学院5例6-1:实现复数的加法运算—用成员函数#include using namespace std;class Complex //定义复数类 { protected: double real; //复数的实部 double image; //复数的虚部 public: Complex(double r = 0.0, double i = 0.0){ real = r; image = i; } Complex add(Complex c); //复数与复数相加的函数 Complex add(double r); //复数与实数相加的函数 void output(); //用于输出复数的函数 }; 用函数实现对象的运算C++语言程序设计沈阳工程学院6例6-1:实现复数的加法运算—用成员函数Complex Complex::add(Complex c) //两个复数相加,一个参数,为什么? { return Complex(real + c.real, image + c.image); }//函数中对两个复数对象的实部和虚部相加,将相加的结果作为新的实部和 虚部利用构造函数重新定义一个复数对象,并将其返回。
Complex Complex::add(double r) //复数和实数相加 { return Complex(real + r, image); } void Complex::output() { if (image using namespace std; class Complex { protected: double real;//复数的实部 double image;//复数的虚部 public: Complex(double r = 0.0, double i = 0.0){real = r; image = i; } void output(); friend Complex add(Complex c1,Complex c2); friend Complex add(Complex c,double r); friend Complex add(double r,Complex c); };用函数实现对象的运算C++语言程序设计沈阳工程学院9例6-2:实现复数的加法运算—用非成员函数void Complex::output() { if (image ===!=^|}运算符重载函数C++语言程序设计沈阳工程学院16例6-3:用“+”运算符实现复数的加法 —重载为成员函数#include using namespace std; class Complex { protected: double real;//复数的实部 double image;//复数的虚部 public: Complex(double r = 0.0, double i = 0.0){real = r; image = i;} void output(); //用于输出复数的函数 Complex operator +(Complex c); //实现复数与复数相加的函数 Complex operator +(double r); //实现复数与实数相加的函数 };运算符重载函数C++语言程序设计沈阳工程学院17例6-3:用“+”运算符实现复数的加法 —重载为成员函数void Complex::output() { if (image using namespace std; class Complex { protected: double real;//复数的实部 double image;//复数的虚部 public: Complex(double r = 0.0, double i = 0.0){real = r; image = i;} void output(); friend Complex operator+(Complex c1, Complex c2); friend Complex operator +(Complex c, double r);friend Complex operator +(double r, Complex c); };运算符重载函数C++语言程序设计沈阳工程学院21void Complex::output() { if (image #include using namespace std; class Triangle {int a,b,c; public: Triangle() { } Triangle(int x,int y,int z) {a=x;b=y;c=z; } float area() { float p,s;p=(a+b+c)/2.0;s=sqrt(p*(p-a)*(p-b)*(p-c));return s; }float operator+(Triangle t){ float adds;adds=this-area()+t.area();return adds;} };main() {Triangle t1(3,5,7),t2(4,6,3);coutt1+t2; }C++语言程序设计沈阳工程学院25小结本节介绍了实现自定义类型数据运算的两种方法 :利用成员函数和友元函数和对现有运算符重载 。
介绍了运算符重载的概念和两种具体的实现方 法:重载为类的成员函数和重载为友元函数,并 结合具体的实例说明了两种重载的特点。
