还剩29页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
《运算符重载与友元》PPT课件目录•运算符重载概述CONTENTS•运算符重载的分类•运算符重载的技巧•友元函数与友元类•运算符重载与友元的注意事项01运算符重载概述什么是运算符重载运算符重载是指允许用户自定义运算符的行为,使得运算符可以用于用户自定义的数据类型通过运算符重载,用户可以为自己的数据类型定义运算符的行为,使得代码更加简洁、易读,并且提高代码的可维护性运算符重载的规则运算符重载必须遵循一定的规则,否运算符重载的规则包括运算符必须则会导致编译错误或者运行时错误是类成员函数或者是友元函数;运算符函数的参数个数和类型必须符合运算符的语法规则;运算符函数的返回VS值类型必须符合运算符的语法规则运算符重载的示例•下面是一个简单的示例,演示了如何重载“+”、“-”运算符,用于两个自定义的复数类对象相加或相减运算符重载的示例示例代码```cppclass Complex{运算符重载的示例public01double real;02double imag;03运算符重载的示例};class ComplexOperatorOverload{运算符重载的示例public1Complex operator+const Complexrhs2const{return Complexreal+rhs.real,imag+3rhs.imag;运算符重载的示例}01Complex operator-const Complexrhs const{02return Complexreal-rhs.real,imag-rhs.imag;03运算符重载的示例}};```在上面的示例中,我们定义了一个名为Complex的复数类,并重载了“+”、“-”运算符通过重载这两个运算符,我们可以使用“+”和“-”运算符来对两个复数对象进行相加或相减的操作02运算符重载的分类一元运算符重载一元运算符重载可以通过在类中定义一个与运算符对应的成员函数来实现03常见的一元运算符重载包括“-”、“~”、“!”等02一元运算符重载是指对一元运算符进行重载,使其能够应用于一个操作数例如,对于“-”运算符,可以将其重载为取负数的操作01二元运算符重载二元运算符重载是指对二元运算符进行重载,使其能够应用于两个操作数例如,对于“+”运算符,可以将其重载为两个对象的相加操作常见的二元运算符重载包括“+”、“-”、“*”、“/”等二元运算符重载可以通过在类中定义一个与运算符对应的成员函数来实现成员函数运算符重载01成员函数运算符重载是指将运算符重载为类的成员函数这种方式的重载通常将运算符作为类的成员函数实现,并使用第一个操作数作为对象来调用该函数02成员函数运算符重载的语法格式为“返回值operator参数列表”03例如,对于“+=”运算符,可以将其重载为成员函数“operator+=”,并在函数中实现相应的操作非成员函数运算符重载非成员函数运算符重载是指将运算符重载为类的01非成员函数这种方式的重载通常将运算符作为类的友元函数实现,并使用两个操作数作为参数来调用该函数02非成员函数运算符重载的语法格式为“返回值operator参数列表”例如,对于“”运算符,可以将其重载为非成03员函数“operator”,并在函数中实现相应的操作03运算符重载的技巧返回值类型处理返回值类型应与运算符的自然语义相符例如,对于加法运算符,通常应返回一个新的对象,该对象包含了两个操作数的和避免返回局部变量的引用或指针,因为这可能导致未定义的行为如果运算符重载是为了改变对象的状态,则应该返回void参数处理对于一元运算符,通常只有一个参数,即运算符所在01的对象例如,一元加法运算符可以表示将某个值加到对象上对于二元运算符,通常有两个参数,即运算符所在的02对象和其他对象例如,二元加法运算符可以表示将两个对象相加考虑重载赋值运算符时,应该同时处理左操作数和右03操作数左操作数应该是赋值运算符所在的类对象,右操作数应该是要赋的值优先级处理01运算符的优先级决定了它们在表达式中的运算顺序在C中,有一些内置的运算符优先级规则,但可以通过重载运算符来改变这些规则02在重载运算符时,应该遵循自然语义和习惯用法,以确保代码的可读性和易用性03如果需要改变运算符的优先级,应该清楚地说明这一点,并在文档中详细说明其用法和含义04友元函数与友元类友元函数的概念友元函数是一种特殊的函数,它可以在类的外部定义,但能够访问类的私有和保护成员友元函数不是类的成员函数,但它可以访问类的私有和保护成员,这是因为类的声明中将其声明为友元友元函数可以用于实现运算符重载,使得运算符具有特定的功能友元函数的示例假设有一个名为`Complex`的复数类,它具有私有成员变量`real`和`imag`,分别表示实部和虚部为了实现复数的加法运算,可以定义一个友元函数`operator+`,该函数可以访问`Complex`类的私有成员变量,并返回一个新的复数对象,该对象的实部和虚部分别为两个复数对象的实部和虚部之和友元类的概念123友元类是一种特殊的类,它可以访问另友元类不是另一个类的成员类,但它可友元类可以用于实现复杂的类之间的关一个类的私有和保护成员以访问另一个类的私有和保护成员,这系,例如嵌套类和外部类之间的关系是因为另一个类的声明中将其声明为友元友元类的示例假设有一个名为`Rectangle`的矩形类,它具有私有成员变量`width`和`height`,分别表示矩形的宽度和高度为了实现矩形的面积计算,可以定义一个嵌套类`Area`,该类可以访问`Rectangle`类的私有成员变量,并计算矩形的面积为了使`Area`类能够访问`Rectangle`类的私有成员变量,可以将`Area`类声明为`Rectangle`类的友元类05运算符重载与友元的注意事项不要破坏运算符的原有含义运算符重载时,应保持运算符原有的基本含义和操作数之间的关系,避免产生歧义或混淆例如,对于“+”运算符,在重载时应保持其加法运算的原有含义,而不是将其变成其他操作注意运算符重载的副作用运算符重载可能会对代码的可读性和可维护性产生负面影响,因此需要谨慎使用重载运算符可能会改变代码的行为和语义,导致难以理解和维护代码注意友元的使用范围和影响应当明确友元函数或类的用途和范围,并考虑其对类的其他成员函数和对象的影响友元函数或类可以访问类的私有和保护成员,但需要谨慎使用以避免破坏封装性避免过度使用友元,以保持类的封装性和可维护性感谢您的观看THANKS。