【C++】C++运算符重载-基础

本篇博客讲解:
运算符重载基础,以及实例

运算符重载基础

运算符重载就是对已有的运算符赋予新的含义,实现新的功能。

运算符重载,如“+”,它可以对int、float、string类型进行加法运算。
“<<”是C++中的左移运算符,但是在输出操作中与cout配合被称为流插入运算符,可以进行输出。
“>>”是右移运算符,与cin配合使用被称为流提取运算符。
它们都被称为运算符重载。

我们也可以根据我们的需要对C++中现有的运算符进行重载,来赋予这些运算符新的含义。
如CTime类,重载+运算符,实现两个CTime对象的相加。

介绍运算符重载前,我们看下如何来实现两个CTime对象相加。
CTime重载+运算符实现两个CTime对象的相加,
time1 + time2 
首先需要定义一个重载的运算符函数,此后在执行被重载的运算符时,系统将自动调用该运算符函数。
运算符重载实际上是函数的重载

运算符重载的格式:返回类型 operator运算符(参数列表)

CTime operator+(CTime& time1, CTime& time2)

 
重载的运算符函数可以作为一般的函数,也可以作为类的成员函数。

CTime operator+(CTime& time) 

下面通过代码来看吧
普通的,通过函数来相加:

friend CTime addTime(CTime& time1, CTime& time2); 
CTime addTime(CTime& time1, CTime& time2)//这里的相加是时分秒进行相加,满60进1
{
    int hour=0, minute = 0;
    int second = time1.m_nSecond + time2.m_nSecond;
    if (second > 60)
    {
        minute++;
        second -= 60;
    }

    minute += (time1.m_nMinute + time2.m_nMinute);
    if (minute > 60)
    {
        hour++;
        minute -= 60;
    }

    hour += (time1.m_nHour + time2.m_nHour);
    if (hour > 24)
    {
        hour -= 24;
    }
    return CTime(hour,minute,second);
}

//输出
int main()
{
    CTime time(10, 50, 20);
    CTime time2(12);
    CTime time3 = addTime(time, time2);
    std::cout << time3.getHour() << ":" << time3.getMinute() << ":" << time3.getSecond() << endl;
    getchar();
    return 0;
}

+号运算重载:

friend CTime operator+(CTime& time1, CTime& time2);

CTime operator+(CTime& time1, CTime& time2)
{
    int hour = 0, minute = 0;
    int second = time1.m_nSecond + time2.m_nSecond;
    if (second > 60)
    {
        minute++;
        second -= 60;
    }

    minute += (time1.m_nMinute + time2.m_nMinute);
    if (minute > 60)
    {
        hour++;
        minute -= 60;
    }

    hour += (time1.m_nHour + time2.m_nHour);
    if (hour > 24)
    {
        hour -= 24;
    }
    return CTime(hour, minute, second);
}

int main()
{
    CTime time(10, 50, 20);
    CTime time2(12); 

    CTime time4 = time + time2; //使用+号重载对两个CTime对象进行相加
    std::cout << time4.getHour() << ":" << time4.getMinute() << ":" << time4.getSecond() << endl;

    getchar();
    return 0;
}

输出结果:

在CTime类内部定义+号重载运算符

CTime operator+(CTime& time);
CTime CTime::operator+(CTime& time)
{
    int hour = 0, minute = 0;
    int second = this->m_nSecond + time.m_nSecond;
    if (second > 60)
    {
        minute++;
        second -= 60;
    }

    minute += (this->m_nMinute + time.m_nMinute);
    if (minute > 60)
    {
        hour++;
        minute -= 60;
    }

    hour += (this->m_nHour + time.m_nHour);
    if (hour > 24)
    {
        hour -= 24;
    }
    return CTime(hour, minute, second);
}

int main()
{
    CTime time(10, 50, 20);
    CTime time2(12);
    CTime time4 = time.operator+(time2);
    std::cout << time4.getHour() << ":" << time4.getMinute() << ":" << time4.getSecond() << endl;

    getchar();
    return 0;
}

结果和前面的是一样的。

源代码下载地址:

GITHUB源码下载地址:点我进行下载

本文章由[谙忆]编写, 所有权利保留。
欢迎转载,分享是进步的源泉。

转载请注明出处:http://chenhaoxiang.cn

本文源自人生之旅_谙忆的博客

时间: 2024-11-03 10:31:31

【C++】C++运算符重载-基础的相关文章

c++运算符重载基础知识详解_C 语言

实际上,很多C++运算符已经被重载.eg:将*运算符用于地址,将得到存储在这个地址中的值,将他用于2个数字时,得到的将是他们的乘积.C++根据操作数的数目和类型来决定采用哪种操作. C++允许将运算符重载扩展到用户定义的类型.例如,允许使用+将两个对象相加.编译器将根据操作数的数目和类型决定使用加法定义.运算符重载可以使代码看起来更自然.例如,将2个数组相加是一种常见的运算.通常,需要使用下面这样的for循环来实现: 复制代码 代码如下: for (int i = 0; i < 20; i++)

《C++语言基础》实践项目——运算符重载(二)

返回:贺老师课程教学链接 [项目1-复数类中的运算符重载(续)]在复数类中的运算符重载基础上(1)再定义一目运算符 -,-c相当于0-c.(2)定义Complex类中的<<和>>运算符的重载,实现输入和输出,改造原程序中对运算结果显示方式,使程序读起来更自然.[参考解答] [项目2-Time类中的运算符重载(续)] 在Time类中的运算符重载基础上(1)定义对时间对象的自增和自减一目运算符 //一目运算符的重载 CTime operator++(int);//后置++,下一秒 CT

《C++语言基础》实践参考——复数类中的运算符重载(续)

返回:贺老师课程教学链接 项目要求 [项目1-复数类中的运算符重载(续)]在复数类中的运算符重载基础上(1)再定义一目运算符 -,-c相当于0-c.(2)定义Complex类中的<<和>>运算符的重载,实现输入和输出,改造原程序中对运算结果显示方式,使程序读起来更自然.[参考解答] #include <iostream> using namespace std; class Complex { public: Complex() { real=0; imag=0; }

C++运算符重载函数基础及其值返回状态

运算符重载是C++的重要组成部分,它可以让程序更加的简单易懂,简单的运算符使用可以使复杂函数的理解更直观. 对于普通对象来说我们很自然的会频繁使用算数运算符让他们参与计算,但是对于自定义类的对象来说,我们是无论如何也不能阻止写出像下面的代码一样的程序来的. 例子如下: class Test{ //过程省略}int main(){ Test a,c; c=a+a;} 当然这样的代码是不能够通过编译的,c++对自定类的算术运算部分保留给了程序员,这也是符合c++灵活特性的. 在c++中要想实现这样的

《C++语言基础》实践项目——运算符重载(一)

返回:贺老师课程教学链接 [项目1-实现复数类中的运算符重载](1)请用类的成员函数,定义复数类重载运算符+.-.*./,使之能用于复数的加减乘除 class Complex { public: Complex(){real=0;imag=0;} Complex(double r,double i){real=r; imag=i;} Complex operator+(const Complex &c2); Complex operator-(const Complex &c2); Com

《C++语言基础》实践参考——分数类中的运算符重载

返回:贺老师课程教学链接 [项目3-分数类中的运算符重载] (1)实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简).比较(6种关系)的运算.可以在第4周分数类代码的基础上开始工作. class CFraction { private: int nume; // 分子 int deno; // 分母 public: //构造函数及运算符重载的函数声明 }; //重载函数的实现及用于测试的main()函数 [参考解答] #include <iostream> #inclu

《C++语言基础》实践参考——Time类中的运算符重载

返回:贺老师课程教学链接 [项目2-Time类中的运算符重载]实现Time类中的运算符重载. class CTime { private: unsigned short int hour; // 时 unsigned short int minute; // 分 unsigned short int second; // 秒 public: CTime(int h=0,int m=0,int s=0); void setTime(int h,int m,int s); void display(

2013级C++第8周(春)项目——运算符重载

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目1]实现复数类中的运算符重载(1)请用类的成员函数,定义复数类重载运算符+.-.*./,使之能用于复数的加减乘除 class Complex { public: Complex(){real=0;imag=0;} Complex(double r,double i){real=r; imag=i;} Complex operator+(C

C02-程序设计基础提高班(C++)第11周上机任务-运算符重载

第11周:阅读教材第10章(p314-346),掌握用运算符重载解决问题,完成第11周上机任务: (回到C02-程序设计基础提高班(C++)学习安排) [任务1]实现复数类中的运算符重载定义一个复数类重载运算符+.-.*./,使之能用于复数的加减乘除.(1)方案一:请用类的成员函数完成运算符的重载: class Complex { public: Complex(){real=0;imag=0;} Complex(double r,double i){real=r;imag=i;} Comple