C++重载运算符

原创 2015年07月10日 17:17:24

本文主要介绍:结构体中重载运算符、类重载运算符以及容器排序重载运算符。
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

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

C/C++运算符重载

1、前言今天要和大家分享的是C++的重载运算符,我第一次看到它的感觉是崩溃滴,完全不理解其规则,今天就写一篇文章以作学习记录吧!C++语言中的数据类型分为基础数据类型和构造数据类型,其中基础数据类型可...

十九、运算符重载(三)String类的改进实现、[]运算符重载、+运算符重载、+=运算符重载、<<运算符重载、>>运算符重载

一、String类的实现 我们继续实现以下功能: []运算符重载 +运算符重载 +=运算符重载 >>运算符重载 例子代码: #include #include using namespace s...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

C++ 运算符重载(二)

目录 一、自增自减运算符++,--       (1)用成员函数的形式来进行重载       (2)非成员函数形式的重载 二、new与delete运算符    ...

运算符重载(C++)2

接着上次的运算符重载: 先给出以下代码用于引出后面的运算符重载函数: class STR { public: STR(char *str= "") //构造函数 { ...

c++运算符重载

1、概述基本数据类型间的运算符没有重载的必要,所以运算符重载主要是面向对象之间的。1.1 能够重载的运算符+ - * / % ^ & | ~ ! = += -= *= ...

C++运算符重载

运算符重载是C++编译时多态的一种形式,可使代码简洁直观具有可读性,搜罗了一些资料,将C++中的运算符重载技术简单总结如下 1、运算符重载是对已有运算符赋予多重含义,使同一个运算符作用域不同数据类型...

c++运算符重载

运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统就自动调用该函数,以实现相应的运算。也就是说,运算符重载是通过定义函数实现的。运算符重载实质上是函数的重载。 重载运算...

C++运算符重载(一)

C++允许在自己的类中,或是在全局作用域中重定义运算符的含义。由于很多面向对象的语言没有提供这种能力,因此你可能会低估这种特性在C++中的作用。C++中运算符的概念十分广泛,甚至包含[](数组索引)、...

c++ 运算符重载

Complex.h #ifndef _COMPLEX_H_ #define _COMPLEX_H_ #include using namespace std; class Complex{ fr...

C++运算符重载

C++运算符重载:重载方法: 成员函数重载 友元函数重载运算符重载规则如下: ①、 C++中的运算符除了少数几个之外,全部可以重载,而且只能重载C++中已有的运算符。 ②、 重载...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)