C++成员函数运算符重载减法

合集下载

C++基础系列——运算符重载

C++基础系列——运算符重载

C++基础系列——运算符重载1. 运算符重载简介所谓重载,就是赋予新的含义。

函数重载(Function Overloading)可以让⼀个函数名有多种功能,在不同情况下进⾏不同的操作。

同样运算符重载(Operator Overloading)可以让同⼀个运算符可以有不同的功能。

可以对 int、float、string 等不同类型数据进⾏操作<< 既是位移运算符,⼜可以配合 cout 向控制台输出数据也可以⾃定义运算符重载:class Complex{public:Complex();Complex(double real, double imag);Complex operator+(const Complex &a) const;void display() const;private:double m_real;double m_imag;};// ...// 实现运算符重载Complex Complex::operator+(const Complex &A) const{Complex B;B.m_real = this->m_real + A.m_real;B.m_imag = this -> m_imag + A.m_imag;return B;// return Complex(this->m_real + A.m_real, this->m_imag + A.m_imag);}int main(){Complex c1(4.3, 5.8);Complex c2(2.7, 3.7);Complex c3;c3 = c1 + c2; // 运算符重载c3.display();return 0;}运算结果7 + 9.5i运算符重载其实就是定义⼀个函数,在函数体内实现想要的功能,当⽤到该运算符时,编译器会⾃动调⽤这个函数,它本质上是函数重载。

C++面向程序设计(第二版)课后习题答案解析

C++面向程序设计(第二版)课后习题答案解析

C++⾯向程序设计(第⼆版)课后习题答案解析最近没什么⼼情整理零散的知识点,就整理⼀下第四章的课后习题答案。

1.定义⼀个复数类Complex,重载运算符“+”,使之能⽤于复数的加法运算。

将运算符函数重载为⾮成员函数,⾮友元的普通函数。

编程序,求两个复数之和。

源代码:1 #include <iostream>2 #include<stdlib.h>3using namespace std;4class Complex5 {public:6 Complex(){real=0;imag=0;}7 Complex(double r,double i){real=r;imag=i;}8double get_real();//获取实部函数9double get_imag();//获取虚部函数10void display();//显⽰函数11private:12double real;13double imag;14 };1516//实现具体的函数17double Complex::get_real()18 {19return real;20 }21double Complex::get_imag()22 {23return imag;24 }25void Complex::display()26 {27 cout<<"("<<real<<","<<imag<<"i)"<<endl;28 }29//重载运算符“+”30 Complex operator + (Complex &c1,Complex &c2)31 {32return Complex(c1.get_real()+c2.get_real(),c1.get_imag()+c2.get_imag());33 }343536int main()37 {38 Complex c1(3,4),c2(5,-10),c3;39 c3=c1+c2;40 cout<<"c3=";41 c3.display();42 system("pause");43return0;44 }2.定义⼀个复数类Complex,重载运算符“+”,“-”,“*”,“/”,使之能⽤于复数的加,减,乘,除。

C++笔记——在模板类中重载操作符

C++笔记——在模板类中重载操作符
博客园 用户登录 代码改变世界 密码登录 短信登录 忘记登录用户名 忘记密码 记住我 登录 第三方登录/注册 没有账户, 立即注册
C++笔记 ——在模板类中重载操作符
实现了一个Matrix模板类,以此为例记录一下在模板类中重载常用的运算符。
不是所有运算符都可以重载,不能被重载的运算符有:长度运算符sizeof,条件运算符?,成员选择运算符.,域解析运算符::
23 Matirx<T> operator+(T1 a){
24
Matirx<T> temp(row, col);
25
for(int i = 0; i < row * col; i++)
26
values[i] += (T)a;
27
return temp;
28 }
29
30 template <typename T1>
9
Matirx<T> tmp(1, col);
10
for(int i = 0; i < col; ++i)
11
tmp.values[i] = values[(r - 1) * col + i];
12
return tmp;
13 }
10.其他
除了面提到的运算符,常用的运算符还有复合运算符(比如+=,*=)和方括号运算符[](用于支持随机访问)以及delete和delete[] 运算符, 由于这些运算符重载方式都大同小异,基本上能在以上的几种中找到差不多的例子,不再赘述。
重载操作符需要特别注意的一点是函数的参数表和返回值的形式。
重载操作符有两种方法,一种是重载为成员函数,一种是重载为友元。

c++结构体重载减号运算符

c++结构体重载减号运算符

在C++中,你可以重载减号运算符(`-`)来为自定义的结构体或者类实现减法操作。

以下是一个简单的例子,它定义了一个名为`Vector`的结构体,并重载了减号运算符:```cpp#include <iostream>#include <cmath>struct Vector {double x, y, z;Vector(double x = 0.0, double y = 0.0, double z = 0.0) : x(x), y(y), z(z) {}double length() {return std::sqrt(x * x + y * y + z * z);}Vector operator - (const Vector& rhs) {return Vector(-rhs.x, -rhs.y, -rhs.z);}};int main() {Vector a(1.0, 2.0, 3.0);Vector b(4.0, 5.0, 6.0);Vector c = a - b;std::cout << "The length of the difference vector is: " << c.length() << std::endl;return 0;}```在这个例子中,`Vector`结构体有一个构造函数,可以初始化`x`,`y`,`z`三个分量。

它还重载了减号运算符,使得我们可以对两个`Vector`对象执行减法操作。

这个减法操作实际上是返回一个新的`Vector`对象,它的每个分量都是被减数(即`a`)对应分量和减数(即`b`)对应分量的差的相反数。

最后,我们计算并打印出差向量的长度。

c++学习资料第 06 章 运算符重载

c++学习资料第 06 章 运算符重载
第 4 页 共 15 页 (西昌学院信息技术系 韩德)
第 6 章 运 算 符 重 载
{ return Complex( ­c.Real, ­c.Image ); } void Complex::print()const { cout << '(' << Real << " , " << Image << ')' << endl; } void main() { Complex c1( 2.5,3.7 ), c2( 4.2, 6.5 ) ; Complex c ; c = c1 ­ c2 ; // operator­(c1,c2) c.print() ; c = 25 + c2 ; // operator+(25,c2) c.print() ; c = c2 + 25 ; // operator+(c2,52) c.print() ; c = ­ c1 ; // operator­(c1) c.print() ; } 当一个运算符的操作需要修改类对象状态时,应该以成员函数重载。例如,需要左值操 作数的运算符(如 =,*=,++ 等)应该用成员函数重载。如果以友员函数重载,可以使用 引用参数修改对象。 当运算符的操作数(尤其是第一个操作数)希望有隐式转换,则重载算符时必须用友员 函数或普通函数。 C++中不能用友员函数重载的运算符有 = () [] -> 6.3 几个典型运算符重载 本节讨论在数学类中常用的几个运算符重载的特点和应用。 6.3.1 重载 ++ 与 ­­ 自增和自减运算符有前置和后置两种形式。每个重载运算符的函数都必须有明确的特 征,使编译器确定要使用的版本。C++规定,前置形式重载为一元运算符函数,后置形式重 载为二元运算符函数。 【例 6­4】例 6­2 中使用了成员函数重载++和­运算符。本例用友员函数重载++运算符。 设有简单类定义 class Increase { public : Increase() ; … friend Increase operator ++ ( Increase & ) ; friend Increase operator ++ ( Increase & , int ) ; private : unsigned value ; } ; 则前置重载的实现为: Increase operator++ ( Increase & a ) { a.value ++ ;

c 函数重载 方法

c 函数重载 方法

c 函数重载方法
C函数重载是C语言中一种非常有用的编程技术,它允许我们定义多个具有相同名称但参数列表不同的函数。

通过函数重载,我们可以使用相同的函数名来执行不同的操作,这样可以提高代码的可读性和灵活性。

在C语言中,函数重载是通过函数名相同但参数列表不同来实现的。

当调用一个重载函数时,编译器会根据传入的参数类型和数量来决定调用哪个函数。

这样,我们可以根据需要定义多个具有相同函数名但不同参数列表的函数,从而实现函数重载。

函数重载在C语言中有许多应用场景,比如实现不同类型的输入参数、返回不同类型的值、实现相似但不完全相同的功能等。

通过函数重载,我们可以更加灵活地使用函数,提高代码的复用性和可维护性。

总之,C函数重载是一种非常有用的编程技术,它可以帮助我们更好地组织和管理代码,提高代码的可读性和灵活性。

在实际开发中,我们可以根据需要合理地使用函数重载,从而更好地实现我们的编程目标。

C++中运算符的重载应用


例如 : + 运算符完成两个 实数 、 用“ ” 两个复数 、 两个字符串的 法 的实 现 。
相关运算 。两个实 数 a 1,= ,则 两个实 数相加 的结 果是 : =0b2
a b 1+ = 2 两个复 数 := 0 2,= + 0 , 两个 复数相 加 的 +=02 1; a 1+ ib 2 1i则 结 果 是 :+ = 2 1i两 个 字 符 串 := v ul,= td ” 则 两 ab 1+ 2 ; a “i a b “s i , s ” uo
( agagP ltcnc ng Hun gn 4 80 ) Hun gn oyeh iCoee agag 30 2
Ab tu t On t e C + +,o e ao v r a i gi a ay e o e p a n t e c n e t f p r t r v r a i g sn x m— s rc h p r tro e l d n n lz d t x li o c p e ao e l d n ,u i g e a o s h oo o o
中图分 类 号 TP3 2 1 文 献 标 识 码 B 文 章 编号 1 1 2 — 5 4 00 0 5 7
Ap l a in o e a o e la ig i + pi t f c o Op r t r Ov r d n C+ o n
Z ag Je hn i
K y rs p rtr F n t no ela ig Ap l ain e wo d P eao u ci v r dn o o pi t s c o


什 么是运算符的重载
() 4 重载运算含义必须清楚 , 不能产生二义性 。运算符的重
运算符重载一般分两种形式 , 即重载为类的 运算符重载是对 已有的运算符赋予多重含义 ,使同一个运 载实质是函数重载 。 成员 函数和重载为类的友元 函数 ,这两种形式都可访问类中的 算符作

C++的PPT第10章

c = (4, 6) d = (-2, -2)
Hale Waihona Puke 总结: 设有双目运算符 B,如果要重载 B 为类的成员函 数,使之能够实现表达式 oprd1 B oprd2,其 中 oprd1 为A 类对象,则 B 应被重载为 A 类的 成员函数,形参类型应该是 oprd2 所属的类型。 经重载后,表达式oprd1 B oprd2 相当于 oprd1.operator B(oprd2),注意重载双目运 算符只需要一个参数。
单目运算符重载

单目运算符,如果重载为类的成员函数,为区 分前置和后置运算符,C++规定:

对于前置单目运算符,重载函数没有参数。 对于后置单目运算符,重载函数有一个整型参数, 这个整型参数没有其他用途,只是用于区分前置运 算与后置运算。

(附加例):定义一个CInt类,类中只有一个数据成 员i,两个运算符“++”的重载函数,一个没有参数, 实现的是前置运算符重载,另一个有一个整型参数, 实现后置运算符重载。
class CInt {private: int i; public: CInt(int a=0); void Print(); CInt operator ++(); CInt operator ++(int); }; int main() { CInt a(5), b(5), c, d; c = a++; d = ++b; cout << "a: “<<a.Print(); cout << "b: “<<b.Print(); cout << "c: “<<c.Print(); cout << "d: “<<d.Print(); }

c++结构体重载运算符

c++结构体重载运算符C++结构体可以通过重载运算符来实现自定义的操作符行为。

重载运算符允许我们使用结构体对象与其他对象之间进行类似于内置数据类型的操作。

下面将介绍一些常用的运算符重载的方式以及其使用场景。

1. 算术运算符重载:- 重载+运算符:可以用于结构体对象之间的相加操作。

- 重载-运算符:可以用于结构体对象之间的相减操作。

- 重载*运算符:可以用于结构体对象与标量之间的乘法运算。

- 重载/运算符:可以用于结构体对象与标量之间的除法运算。

2. 关系运算符重载:- 重载==运算符:用于比较两个结构体对象是否相等。

- 重载!=运算符:用于比较两个结构体对象是否不相等。

- 重载<运算符:用于比较两个结构体对象的大小关系。

- 重载>运算符:用于比较两个结构体对象的大小关系。

- 重载<=运算符:用于比较两个结构体对象的大小关系。

- 重载>=运算符:用于比较两个结构体对象的大小关系。

3. 赋值运算符重载:- 重载=运算符:用于将一个结构体对象的值赋给另一个对象。

- 重载+=运算符:用于将一个结构体对象与另一个对象相加,并将结果赋给第一个对象。

- 重载-=运算符:用于将一个结构体对象与另一个对象相减,并将结果赋给第一个对象。

- 重载*=运算符:用于将一个结构体对象与标量相乘,并将结果赋给第一个对象。

- 重载/=运算符:用于将一个结构体对象与标量相除,并将结果赋给第一个对象。

4. 输入输出运算符重载:- 重载<<运算符:用于将结构体对象的数据输出到标准输出流。

- 重载>>运算符:用于从标准输入流中读取数据,并赋给结构体对象的成员变量。

运算符重载的基本语法如下:```返回类型 operator运算符(参数列表) {// 重载运算符的实现代码// 可以直接访问结构体对象的成员变量// 可以调用结构体对象的方法// 可以与其他对象进行运算// 返回运算结果}```在进行运算符重载时,需要注意以下几点:- 重载运算符必须是成员函数或友元函数。

实验七-运算符重载参考答案

实验七-运算符重载参考答案实验七多态性—函数与运算符重载7.1 实验目的1.理解掌握成员函数方式运算符重载;2.理解掌握友元函数方式运算符重载;3.理解掌握++、--运算符的重载。

7.2 实验内容7.2.1程序阅读1.理解下面的程序,并运行查看结果,回答程序后面的问题。

#include <iostream>using namespace std;class CComplex{public:CComplex(){real = 0;imag = 0;}CComplex(int x,int y){real = x;imag = y;}int real;int imag;CComplex operator + (CComplex obj1)//---------------------------------------------①{CComplex obj2(real - obj1.real, imag - obj1.imag);return obj2;}};int main(){CComplex obj1(100,30);CComplex obj2(20, 30);CComplex obj;obj = obj1+obj2; //------------------------------------------------------------------②cout << obj.real <<endl;cout << obj.imag << endl;return 0;}问题一:①处的运算符重载,为什么该函数的返回值要设计成CComplex类型?答:因为在函数中return obj2,obj2是CComplex 类型,所以函数返回值要与return返回的类型相同,即设计成CComplex类型。

问题二:②处的运算符重载函数调用就相当于“obj=operator+(obj1,obj2);”,但是为什么CComplex类中的运算符重载函数只设计了一个参数?答:因为成员函数经编译后会产生this指针,this指针会指向调用该函数的obj1对象,该obj1对象就是就相当于函数的第一个参数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档