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

    定义一个结构体Point,用来表示平面上的点:

    struct Point
    {
        int x;
        int y;
    };
    

    咱们经常用到的运算符“+”、“-”、“*”、“/”,只能用于int, float, double, char类型的变量之间。两个Point的变量,并不能使用这些运算符来进行运算。
    在C++中,咱们可以通过重载运算符(operator)的方法,来实现一些复杂数据类型变量的运算。

    例1

    #include <iostream>
    using namespace std;
    
    struct Point
    {
        int x;
        int y;
    
        Point operator+ (Point &b)
        {
            Point p;
            p.x = (this->x + b.x) / 2;
            p.y = (this->y + b.y) / 2;
            return p;
        }
    };
    
    
    int main()
    {
        Point p1, p2, p3;
        p1.x = 10;
        p1.y = 15;
        p2.x = 90;
        p2.y = 25;
        p3 = p1 + p2;
        cout << p3.x << ',' << p3.y << endl;
    
        return 0;
    }
    

    运行结果:

    50,20
    

    分析:
    这里通过重载运算符“+”,实现了两个Point变量之间的加法运算。学过初中平面几何的人应该看得出来,这里两个Point变量相加得到的结果是这两点之间的中点。

    在C++中,有些运算符可以重载,有些运算符不可以重载。
    (1)下面是可重载的运算符列表:

    双目算术运算符:+ (加),-(减),*(乘),/(除),% (取模)
    关系运算符: ==(等于),!= (不等于),< (小于),> (大于>,<=(小于等于),>=(大于等于)
    逻辑运算符:||(逻辑或),&&(逻辑与),!(逻辑非)
    单目运算符:+ (正),-(负),*(指针),&(取地址)
    自增自减运算符:++(自增),--(自减)
    位运算符:   | (按位或),& (按位与),~(按位取反),^(按位异或),,<< (左移),>>(右移)
    赋值运算符:  =, +=, -=, *=, /= , % = , &=, |=, ^=, <<=, >>=
    空间申请与释放:    new, delete, new[ ] , delete[]
    其他运算符:  ()(函数调用),->(成员访问),,(逗号),[](下标)
    

    (2)下面是不可重载的运算符列表:

    .:成员访问运算符
    .*, ->*:成员指针访问运算符
    :::域运算符
    sizeof:长度运算符
    ?::条件运算符
    #: 预处理符号
  • 相关阅读:
    蛙蛙推荐:微软MSDN导航菜单演示(Javascript+CSS2)
    看来偶的WEB软件开发基本功还得再扎实一些
    蛙蛙请教:c#面向对象编程的有些抉择问题?
    蛙蛙请教:偶在CSDN发的好多问题都没有解决呢,我集中了一下,大家给看看
    Hive UDF开发
    ubuntu下设置开机自启动项
    ubuntu 扩展存储空间
    ubuntu 快速回到桌面
    编译Hive/Hadoop总结
    Linux MC——终端环境的文件管理器
  • 原文地址:https://www.cnblogs.com/alan-blog-TsingHua/p/10867101.html
Copyright © 2011-2022 走看看