-
-
[分享]C++基础十五-运算符重载
-
发表于: 2021-10-26 15:35 8990
-
函数重载可以让一个函数名有多种功能,在不同的情况下进行不同的操作。同理,运算符也可以重载,同一个运算符可以有不同的功能。
实际上,我们已经使用了运算符重载,例如使用 + 号对不同类型的数据进行加法运算,<< 既是位移运算符,又可以配合cout 向控制台输出数据。C++ 本身已经对这些运算符进行了重载,同时C++ 也允许程序员自己重载运算符。
operator 是关键字,专门用于定义重载运算符的函数。
运算符重载其实就是定义一个函数,在函数体内实现想要的功能,当用到该运算符时,编译器会自动调用这个函数。也就是说,运算符重载是通过函数实现的,它本质上是函数重载,运算符重载函数除了函数名有特定的格式,其它地方和普通函数并没有区别。
返回值类型 operator运算符名称(形参表列)
{
/
/
TODO:
}
返回值类型 operator运算符名称(形参表列)
{
/
/
TODO:
}
/
/
定义一个复数类,使用运算符重载实现复数的加法运算
#include <iostream>
using namespace std;
class
CComplex
{
public:
CComplex();
CComplex(double real, double imag);
public:
/
/
声明运算符重载
CComplex operator
+
(const CComplex& A) const;
void Display() const;
/
/
重载输入运算符
friend istream& operator>>(istream&
in
, CComplex& C);
/
/
重载输出运算符
friend ostream& operator<<(ostream& out, CComplex& C);
private:
double m_dbReal;
/
/
实部
double m_dbImag;
/
/
虚部
};
CComplex::CComplex() : m_dbReal(
0.0
), m_dbImag(
0.0
) { }
CComplex::CComplex(double real, double imag) : m_dbReal(real), m_dbImag(imag) { }
/
/
实现运算符重载
CComplex CComplex::operator
+
(const CComplex& A) const
{
return
CComplex(this
-
>m_dbReal
+
A.m_dbReal, this
-
>m_dbImag
+
A.m_dbImag);
}
void CComplex::Display() const
{
cout << m_dbReal <<
" + "
<< m_dbImag <<
"i"
<< endl;
}
istream& operator>>(istream&
in
, CComplex& C)
{
in
>> C.m_dbReal >> C.m_dbImag;
return
in
;
}
ostream& operator<<(ostream& out, CComplex& C)
{
out << C.m_dbReal <<
" + "
<< C.m_dbImag <<
"i"
<< endl;
return
out;
}
int
main()
{
CComplex c1(
1.1
,
2.2
);
CComplex c2(
2.2
,
1.1
);
CComplex c3
=
c1
+
c2;
c3.Display();
cin >> c1 >> c2;
c3
=
c1
+
c2;
cout << c3 << endl;
return
0
;
}
/
/
定义一个复数类,使用运算符重载实现复数的加法运算
#include <iostream>
using namespace std;
class
CComplex
{
public:
CComplex();
CComplex(double real, double imag);
public:
/
/
声明运算符重载
CComplex operator
+
(const CComplex& A) const;
void Display() const;
/
/
重载输入运算符
friend istream& operator>>(istream&
in
, CComplex& C);
/
/
重载输出运算符
friend ostream& operator<<(ostream& out, CComplex& C);
private:
double m_dbReal;
/
/
实部
double m_dbImag;
/
/
虚部
};
CComplex::CComplex() : m_dbReal(
0.0
), m_dbImag(
0.0
) { }
CComplex::CComplex(double real, double imag) : m_dbReal(real), m_dbImag(imag) { }
/
/
实现运算符重载
CComplex CComplex::operator
+
(const CComplex& A) const
{
return
CComplex(this
-
>m_dbReal
+
A.m_dbReal, this
-
>m_dbImag
+
A.m_dbImag);
}
赞赏
他的文章
- [分享]C++基础十七-异常机制 8612
- [分享]C++基础十六-模板 8968
- [分享]C++基础十五-运算符重载 8991
- [分享]C++基础十四-抽象类 8703
- [分享]C++基础十三-多态 8505
看原图
赞赏
雪币:
留言: