首页
社区
课程
招聘
[分享]C++基础十五-运算符重载
发表于: 2021-10-26 15:35 8990

[分享]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);
}
 

[招生]系统0day安全班,企业级设备固件漏洞挖掘,Linux平台漏洞挖掘!

收藏
免费 2
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
// // 统计代码