关闭

C++重载运算符

标签: 重载运算符结构体重载运算符class重载运算符list排序引用
416人阅读 评论(0) 收藏 举报
分类:

本文主要介绍:结构体中重载运算符、类重载运算符以及容器排序重载运算符。
1、结构体重载运算符

typedef struct tagSaveImgFile
{
    tagSaveImgFile &operator = (tagSaveImgFile &other) //放在结构体内部
    {
        m_scale = other.m_scale;
        m_imgPath = other.m_imgPath;
        m_labelPath = other.m_labelPath;
        m_xmlPath = other.m_xmlPath;

        return *this;

    };

    bool operator <(const tagNeighbor &other )
    {

        return m_dissimCrit<other.m_dissimCrit;
    }

    int m_scale;
    string m_imgPath;
    string m_labelPath;
    string m_xmlPath;
}CSaveFiles;

2、类定义重载运算符

.h文件中类定义:

class CParameter
{
public:
    CParameter();
    ~CParameter();

    CParameter & operator = (const CParameter &other);
    int m_scale;
    string m_imgPath;
    string m_labelPath;
    string m_xmlPath;
};

.cpp中文件中程序:

    CParameter::CParameter()
    {

    }
    CParameter::~CParameter()
    {

    }

    CParameter & CParameter::operator = (const CParameter &other)
    {
        if (this != &other)
        {
            m_scale = other.m_scale;
            m_imgPath = other.m_imgPath;
            m_labelPath = other.m_labelPath;
            m_xmlPath = other.m_xmlPath;
        }
        return *this;
    }

class CNeighbor
{
public:
    int     m_id;
    double  m_dissimCrit;
    double  m_mergedPerim;

    //重载等于
    CNeighbor &operator = (const CNeighbor &other)
    {
        m_id = other.m_dissimCrit;
        m_dissimCrit = other.m_dissimCrit;
        m_mergedPerim = other.m_mergedPerim;
    }
    //重载 < 设定排序顺序
    bool operator < (const CNeighbor &other) const //set容器要加const
    {
        return m_dissimCrit < other.m_dissimCrit;
    }

    //构造函数 支持CNeighbor(a,b,c)赋值
    CNeighbor(int id, double dissimCrit, double mergedPerim)
    {
        m_id = id;
        m_dissimCrit = dissimCrit;
        m_mergedPerim = mergedPerim;
    }
};

3、容器排序重载运算符
.h文件定义及重载:

class CParameter
{
public:
    CParameter();
    ~CParameter();

    CParameter & operator = (const CParameter &other);
    int m_scale;
    string m_imgPath;
    string m_labelPath;
    string m_xmlPath;
};

typedef list<CParameter> listParameter;

//list可对存储的对象排序,重载按m_scale升序排列,即由小到大排序
inline bool operator <(const CParameter &one, const CParameter &other)
{
    return one.m_scale<other.m_scale;
}

.cpp中调用:

        listParameter listpara;

        CParameter para;
        para.m_scale = 300;
        para.m_imgPath = "C:\\Users\\hong\\Desktop\\ObjectSeg100.tif";
        para.m_labelPath = "C:\\Users\\hong\\Desktop\\ObjectLabel100.tif";
        para.m_xmlPath = "C:\\Users\\hong\\Desktop\\ObjectSeg.xml";

        listpara.push_back(para);

        CParameter other;
        other.m_scale = 200;
        other.m_imgPath = "C:\\Users\\hong\\Desktop\\ObjectSeg100.tif";
        other.m_labelPath = "C:\\Users\\hong\\Desktop\\ObjectLabel100.tif";
        other.m_xmlPath = "C:\\Users\\hong\\Desktop\\ObjectSeg.xml";

        listpara.push_back(other);


        cout<<listpara.begin()->m_scale<<endl; //输出结果为300

        listpara.sort();

        cout<<listpara.begin()->m_scale<<endl; //输出结果为200

注:
1.引用符&的介绍:
http://www.cnblogs.com/Mr-xu/archive/2012/08/07/2626973.html

2.引用与指针区别:
http://xinklabi.iteye.com/blog/653643

3.值传递、指针传递和引用传递效率比较
http://blog.sina.com.cn/s/blog_a3daf09d01015c0r.html

4.const用法:
http://blog.csdn.net/zcf1002797280/article/details/7816977

0
0
查看评论

C++重载运算符详解

结构体基础 结构体,是一种可以自己编写数据类型(如int,double等)的一种数据集合,声明关键字struct,框架(声明于main之外): struct 名称 { 集合之中的变量 };//分号一定不要忘了 例如: struct student { char name[10...
  • C20190102
  • C20190102
  • 2017-04-25 17:45
  • 1277

C++运算符重载例子代码

#include using namespace std; class Time { private: int h,m,s; public: Time(); Time(int mh,int mm,int ms); //重载++运算符 Time operat...
  • qq_18860653
  • qq_18860653
  • 2017-02-08 17:32
  • 567

C++ 类的重载运算符和priority_queue综合使用

今天在写poj上的一道题时,提交之后显示代码运行超时,查了一下网上都说因为测试数据量大,普通循环查找很容易超时,用优先队列能解决问题,有时题目里设计到的状态信息比较复杂,要用一个类来维护,类的重载运算符自从上学期学过之后我就忘光了,于是现在写一篇博客好好记录一下:C++中类的重载运算符我们知道int...
  • Bingtang_blog
  • Bingtang_blog
  • 2016-10-06 16:42
  • 805

C++模板类与运算符作为友元函数重载

我自定义了一个模板类并重载了运算符,预定义实现功能为能实现对数组一般操作,类似于vector。 #ifndef ARRAY_H #define ARRAY_H #include using namespace std; template class Array{ friend ostrea...
  • u010003835
  • u010003835
  • 2015-07-31 19:09
  • 2421

C++重载运算符(一)如何重载运算符

刚学C++的同学都老是听说什么运算符重载,好像很高级的样子,那么嘿嘿嘿。 现在我们有一个时间类,我们要重载加减乘除运算符,以达到时间类之间的计算就跟数字加减乘除运算一样。 首先我们先从最简单的来: 时间类: 然后函数实现:(我们在此只贴出构造函数和Sum函数的实现,因为其他的用不到) 最后...
  • lishuzhai
  • lishuzhai
  • 2016-02-29 11:47
  • 4054

C++重载运算符需要是const的情况

#include class twelfth_class_1{ int i; public: twelfth_class_1(int ii=0 ){ i = ii; } const twelfth_class_1 operator+(const twelfth_class_1 &tc1)c...
  • renlangwww
  • renlangwww
  • 2016-08-30 11:43
  • 964

高精度重载运算符的C++代码

高精度算法(压位存储)! 有的时候,数字会大到连long long都不能承受的程度。这时,我们可以自己模拟大数的各种运算。 所谓压位存储,就是在高精度数内部采用10000进制(即每四位放到一个数中)进行存储。它与10进制(即一个数位对应一个数)相比速度要快一些。 高精度数内部也可以采用1000...
  • u012837895
  • u012837895
  • 2014-11-03 16:36
  • 506

C++--模板遇上运算符重载

#include using namespace std; template class Complex { friend Complex MySub(Complex& c1,Complex& c2) { Complex temp(c1.a-c2.a,c1.b-c2.b...
  • sum_TW
  • sum_TW
  • 2016-12-26 16:58
  • 2057

c++简单几种运算符重载

简单介绍几种运算符重载c++的类中有最基本的“六大少”: 构造函数,拷贝构造函数,赋值语句,析构函数,取地址运算符重载和const修饰的取地址运算符重载,接下来进行简要的说明(我们以Test类为主):
  • angry_youth
  • angry_youth
  • 2017-03-20 18:55
  • 956

C++语法,复制构造函数与=运算符重载

C++:复制构造函数在什么时候被调用?它和operator = 区分 1、对象在创建时使用其他的对象初始化 Person p(q); //此时复制构造函数被用来创建实例p Person p = q; //此时复制构造函数被用来在定义实例p时初始化p 2、对象作为函数的参数进行值传...
  • u010003835
  • u010003835
  • 2015-08-06 11:15
  • 706
    个人资料
    • 访问:199917次
    • 积分:2317
    • 等级:
    • 排名:第19026名
    • 原创:62篇
    • 转载:1篇
    • 译文:0篇
    • 评论:62条
    最新评论