前景 : 在设计模式里面存在观察者模式(主题只有一个 , 订阅着(订阅主题)有很多个 )。在一些语言中叫事件发送/事件侦听 比如AS3 。在C#也有类似的概念 , 不过它重载了+/-用于订阅和取消订阅的计算。
公司主营业务:网站设计、成都网站制作、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联建站是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联建站推出冷水江免费做网站回馈大家。
这里重载+/-用于订阅或取消订阅确实比AS3的 addEventListener()和 removeEventListener()要来的高明。好了,停止瞎扯淡,开始正片。
本篇主要讲解C++运算重载的基础入门运用,对于不熟悉C#的读者也不要紧。
一 : 类外重载
#includeusing 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; }
得到的结果:
关于 + 操作符 。 用于Class + 值类型显然是不合适的(会报错)。如果重载+就可以了。
int operator+(Oc& oc , int add) 这样申明的意义是 :
①:返回一个int类型
②:+的左操作符为 Oc&类型 右操作符为int类型(也就是只能是 oc + int , 而不能反过来 int + oc )
important : 如果要反过来用 int + oc 可以这样申明 int operator+(int add , Oc& oc )
③:第一个参数Oc& oc是一个引用类型 , 这样可以防止调用拷贝构造
二: 类内重载
#includeusing 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; }
运行结果:
在类中重载运算符 , 会默认给出第一个参数this。
总结如下:
①:= , [] , () , -> 必须写在类内
②:+= -= 等符合运算符通常写在类内
③:++ -- 通常写在类内
④:算术运算符 , 关系运算符一般写在类外
⑤::: .* . ?: 这4个是不能重载的