zoukankan      html  css  js  c++  java
  • C++运算符重载

    一、运算符重载的概念

    在C语言中,运算符只能用于基本数据类型,例如,可以用==判断两个整数是否相等,但不能用于判断字符串是否相等,不能用于判断结构体,也不能用于判断类。

    在C++中,运算符的重载就是把运算符的符号赋予新的含义,如果类重载了 == 运算符,那么就可以用== 判断两个类是否相等。

    二、运算符重载的实现

    operator是C++的一个关键字,它和运算符一起使用,表示一个运算符重载函数,在理解时可将operator和运算符(如operator==)视为类的一个成员函数名。

    示例(book214.cpp)

    /*
     * 程序名:book214.cpp,此程序用于演示C++运算符重载。
     * 作者:C语言技术网(www.freecplus.net) 日期:20190525
    */
    #include <stdio.h> 
    #include <string.h>    
    
    class CGirl    // 定义类
    {
    public:
      char m_name[50];  // 姓名
      char m_sc[30];    // 身材,火辣;普通;飞机场。
    
      bool operator==(const CGirl &Girl)  // 重载==运算符
    };
    
    int main()
    {
      CGirl Girl1,Girl2;
    
      strcpy(Girl1.m_name,"西施");
      strcpy(Girl2.m_name,"东施");
        
      if (Girl1 == Girl2) printf("Girl1和Girl2是同一个人。
    ");
      else printf("Girl1和Girl2不是同一个人。
    ");
    }
    
    bool CGirl::operator==(const CGirl &Girl)  // 重载==运算符
    { 
      // 如果两个类的姓名相同,就相等
      if (strcmp(m_name,Girl.m_name)== 0) return true;
    
      return false;
    }
    

    CGirl类重载了==运算符,定义了operator==函数,用于判断两个对象是否相等,实际上是判断两个对象的成员变量m_name是否相同,如果相同,对象就相等。

    运行效果

    在这里插入图片描述

    通过上述结果能够知道,因为操作符重载函数operator==是CGirl类的一个成员函数,所以对象Girl1、Girl2都可以调用该函数。其中的 if (Gril1 ==Gril2) 语句,相当于对象Gril1调用函数operator==,把对象Girl2作为一个参数传递给该函数,从而实现了两个对象的比较。

    我们把语句改为if (Gril1 != Gril2) ,会如何?编译如下:

    在这里插入图片描述

    编译无法通过,因为CGirl类并没有重载!=运算符。

    三、个人经验

    下一章节中将学习C++的string类,它重载了+、=、==、!=等运算符,对程序员来说,确实感觉有些方便。

    在实际开发中,重载运算符有可能会模糊程序员的意图,如果要判断Girl1和Girl2的m_name成员是否相等,我更愿意用strcmp函数。

    很久很久以前,学习了运算符重载的时候,可以把各种运算符重载成奇奇怪怪的功能,觉得很好玩,后来就不玩了,感觉没什么意思。

    运算符重载还有很多其它的知识,我就不介绍了。

    四、课后作业

    对CGirl重载!=操作符试试。

    五、版权声明

    C语言技术网原创文章,转载请说明文章的来源、作者和原文的链接。
    来源:C语言技术网(www.freecplus.net)
    作者:码农有道

    如果文章有错别字,或者内容有错误,或其他的建议和意见,请您留言指正,非常感谢!!!

  • 相关阅读:
    mac Path had bad ownership/permissions
    iOS,Android,Jave后台AES加密解密
    iOS bug调试技巧学习----breakpoint&condition
    pod trunk push --verbose 失败的原因总结
    CoreAnimation学习,学习总结,记录各种过程中遇到的坑
    封装TableView有可能用到的数据结构和UITableViewCell的一个继承类
    使用类似于中介者模式实现不同VC之间的跳转
    iOS工程师常用的命令行命令总结
    一个简单的图文混排的排版引擎
    如何添加自己封装的代码到Cocoapod
  • 原文地址:https://www.cnblogs.com/wucongzhou/p/12498303.html
Copyright © 2011-2022 走看看