【C++】成员函数重载二元和一元运算符

重载双目运算符时,运算符函数中应该具有两个参数,若运算符函数作为类的成员函数(当运算符重载函数作为类的成员函数时,要求操作数左边必须是一个对象,而函数的参数可以是同类的对象也可以是普通的变量),则只需要一个参数。

双目运算符

双目运算符就是具有两个操作数的运算符。如 +、-、==等。

对双目运算符而言,成员函数重载运算符的函数参数表中只有一个参数,而用友元函数重载运算符函数参数表中含有两个参数。

成员函数重载 == 、>运算符:

    bool operator==(CTime& time);
    bool operator>(CTime& time);
//判断对象的每个成员变量是否相等
bool CTime::operator==(CTime& time)
{
    if (m_nHour == time.m_nHour&&m_nMinute == time.m_nMinute&&m_nSecond == time.m_nSecond)
    {
        return true;
    }
    return false;
}

bool CTime::operator>(CTime& time)
{
    if (m_nHour > time.m_nHour) //先判断两个对象的小时数的大小
    {
        return true;
    }
    else if (m_nHour < time.m_nHour)
    {
        return false;
    }
    else //这是两个对象小时数相等的情况,接下来就判断分钟数
    {
        if (m_nMinute> time.m_nMinute) //再判断两个对象的分钟数的大小
        {
            return true;
        }
        else if (m_nMinute < time.m_nMinute)
        {
            return false;
        }
        else //这是两个对象的时钟和分钟相等的情况下
        {
            if (m_nSecond>time.m_nSecond) //最后比较秒钟
            {
                return true;
            }
            else
            {
                return false;
            }
        }

    }

    return false;  //最后就是两个对象相等,也不满足一个对象大于另外一个对象的情况,返回false
}

成员函数重载++运算符

    CTime operator++();//前置的++
    CTime operator++(int);//后置++,这个int类型的参数只是为了区分,我们并不会使用这个参数,所以我们不需要形参的名字
//前置的++
CTime CTime::operator++() //重载++(前置)运算符
{
    CTime time(0,0,1); //定义了一个秒数为1的对象
    *this = *this + time;//由于前面的函数已经重载了加号运算符,里面已经定义好了相关的操作,所以这句代码调用了加号运算符的重载函数,并将对象的秒数加一
    return *this; //前置++的操作顺序就是先加再返回它的值
}

CTime CTime::operator++(int) //重载++(后置)运算符
{
    CTime time = *this;//后置++的操作规则是先返回再加,所以需要创建一个临时变量保存好这个对象的值
    CTime time2(0, 0, 1);//定义了一个秒数为1的对象
    *this = *this + time2;//同上调用了加法运算符的重载函数
    return *this;//返回加法操作之前的对象的值
}
    CTime time(10, 50, 20);

    ++time;
    std::cout << time.getHour() << ":" << time.getMinute() << ":" << time.getSecond() << endl;

    time++;
    std::cout << time.getHour() << ":" << time.getMinute() << ":" << time.getSecond() << endl;

结果

源代码下载地址:

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

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

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

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

时间: 2024-09-25 06:04:07

【C++】成员函数重载二元和一元运算符的相关文章

(一二八)比较成员函数、中括号表示法、静态成员函数

有比较函数是strcmp (参数1, 参数2)   参数是两个字符串,所在头文件是<string>   比较方法是按顺序依次比较参数1和参数2的第一个字符(看ASCII值). 假如相同,则比较下一个: 假如参数1的比参数2的大,则返回1(正数): 假如参数1的比参数2的小,则返回-1(负数): 假如两个字符串完全一样,则返回0.   其原理是(这个我自己写的): int strcmp(const char* a, const char* b) { while (*a == *b) { if (

【C/C++学院】0819-/类的成员函数与const-mutable /构造与析构/拷贝构造deletedefault以及深浅拷贝/静态成员函数成员变量类在内存的存储默认参数/友元类以及友元函数

类的成员函数与const-mutable  成员函数 Fushu.h #pragma once #include <iostream> class fushu { public: int x; int y; public: fushu(); ~fushu(); void show(); inline void showall(int x, int y);//显式内联 void setxy(int x, int y);//编译器优化,默认隐式内联 void show(int x, int y);

拷贝构造,深度拷贝,关于delete和default相关的操作,explicit,类赋初值,构造函数和析构函数,成员函数和内联函数,关于内存存储,默认参数,静态函数和普通函数,const函数,友元

 1.拷贝构造 //拷贝构造的规则,有两种方式实现初始化. //1.一个是通过在后面:a(x),b(y)的方式实现初始化. //2.第二种初始化的方式是直接在构造方法里面实现初始化. 案例如下: #include<iostream> //如果声明已经定义,边不会生成 class classA { private: int a; int b; public: //拷贝构造的规则,有两种方式实现初始化 //1.一个是通过在后面:a(x),b(y)的方式实现初始化 //2.第二种初始化的方式是直

关于C++类成员函数的重载、覆盖、隐藏与virtual关键字

1. 重载.覆盖与隐藏 1).重载:成员函数具有以下的特征时发生"重载" A.相同的范围(同一个类中) B.函数的名字相同 C.参数类型不同(不能进行隐式类型转换) D.Virtual关键字可有可无 2).覆盖(也叫"继承"):指派生类函数覆盖基类函数,特征是: A.不同的范围(分别位于基类与派生类中) B.函数名字相同 C.参数相同 D.基类函数必须有virtual关键字 3).隐藏:是指派生类的函数屏蔽了与其同名的基类函数,规则如下: A.如果派生类的函数与基类

C++运算符重载 成员函数与友元函数详解

以下是对C++运算符重载 成员函数与友元函数进行了介绍,需要的朋友可以过来参考下   复制代码 代码如下: #include<iostream> using namespace std; class A {     int x,y;     public:     A(int xx,int yy):x(xx),y(yy){}     A(){x=0;y=0;}     A operator+(const A&b) //不加const限定,也可以     { return A(x+b.x

【C/C++学院】(8)全局函数和类成员函数转化/友元/操作符重载

1.全局函数和类成员函数转化     全局函数和成员函数的相互转化:只需要修改一个指向本类的this指针: #include <iostream> using namespace std; class Test { public: Test(int a, int b) { this->a = a; this->b = b; } //成员函数 Test &Gadd2(Test &t2) { this->a = this->a + t2.a; this-&g

error-“CShape”中没有找到重载的成员函数

问题描述 "CShape"中没有找到重载的成员函数 error C2511: "CShape::CShape(intintintint)": "CShape"中没有找到重载的成员函数 #include ""Shape.h"" CShape::CShape(int x1int y1int x2int y2){ m_x1=x1; m_y1=y1; m_x2=x2; m_y2=y2;} void CShape::

C++ 成员函数的重载,继承,覆盖和隐藏

一. C++成员函数的重载 C++中的成员函数有四种,分别是普通成员函数,virtual虚函数,const成员函数. (1) void func(int a); (2) virtual void func(int a); (3) void func(int a) const; 如果在一个类中,声明这四种函数,哪是重复定义?哪些是重载? 其中(1)(2)是重复定义,故编译不能通过,而(3)与(1)(2)是不同类型的函数,是重载. 成员函数被重载的特征是: (1)具有相同的作用域(即同一个类定义中)

类成员函数的重载、覆盖与隐藏之间的区别总结_C 语言

答案:a.成员函数被重载的特征:(1)相同的范围(比如在同一个类中):(2)函数名字相同:(3)参数不同:(4)virtual 关键字可有可无. b.覆盖是指派生类函数覆盖基类函数,特征是:(1)不同的范围(分别位于派生类与基类):(2)函数名字相同:(3)参数相同:(4)基类函数必须有virtual 关键字. c."隐藏"是指派生类的函数屏蔽了与其同名的基类函数,规则如下:(1)如果派生类的函数与基类的函数同名,但是参数不同.此时,不论有无virtual关键字,基类的函数将被隐藏(注