C++运算符重载(一)-创新互联

前景 : 在设计模式里面存在观察者模式(主题只有一个 , 订阅着(订阅主题)有很多个 )。在一些语言中叫事件发送/事件侦听 比如AS3 。在C#也有类似的概念 , 不过它重载了+/-用于订阅和取消订阅的计算。

成都创新互联2013年至今,先为卢氏等服务建站,卢氏等地企业,进行企业商务咨询服务。为卢氏企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

这里重载+/-用于订阅或取消订阅确实比AS3的 addEventListener()和 removeEventListener()要来的高明。好了,停止瞎扯淡,开始正片。

本篇主要讲解C++运算重载的基础入门运用,对于不熟悉C#的读者也不要紧。

一 : 类外重载

#include 
using namespace std;
class Oc
{
public:
    int cnt;
    Oc( int cnt)
    {
        this->cnt = cnt;
    }
};
//重写 +
// 左操作符 Oc ,右操作符 int
int operator+(Oc& oc , int add)
{
    oc.cnt += add;
    return oc.cnt;
}
int main()
{
    system("color 5A");
    Oc oc(2);
    int sum = oc + 5;
    cout << oc.cnt << endl;
    return 0;
}

得到的结果:

C++ 运算符重载(一)

关于 + 操作符 。 用于Class + 值类型显然是不合适的(会报错)。如果重载+就可以了。

C++ 运算符重载(一)

int operator+(Oc& oc , int add) 这样申明的意义是 :

①:返回一个int类型

②:+的左操作符为 Oc&类型 右操作符为int类型(也就是只能是 oc + int , 而不能反过来 int + oc )

important : 如果要反过来用 int + oc 可以这样申明 int operator+(int add , Oc& oc )

③:第一个参数Oc& oc是一个引用类型 , 这样可以防止调用拷贝构造

二: 类内重载

#include 
using namespace std;
class Oc
{
public:
    int cnt;
    Oc( int cnt)
    {
        this->cnt = cnt;
    }
    //其实有2个参数:第一个为隐藏参数this , 第二个为add
    int operator+(int add)
    {
        this->cnt += add;
        return this->cnt;
    }
};
int main()
{
    system("color 5A");
    Oc oc(2);
    int sum = oc + 5;
    cout << oc.cnt << endl;
    return 0;
}

运行结果:

C++ 运算符重载(一)

在类中重载运算符 , 会默认给出第一个参数this。

总结如下:

①:= , [] , () , -> 必须写在类内

②:+= -= 等符合运算符通常写在类内

③:++ -- 通常写在类内

④:算术运算符 , 关系运算符一般写在类外

⑤:::   .*  .   ?:  这4个是不能重载的

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


分享名称:C++运算符重载(一)-创新互联
网页网址:http://azwzsj.com/article/cdgoph.html