C++ 运算符重载三(链式编程)
//运算符重载之链式编程
#include<iostream>
using namespace std; //对于友元函数重载运算符只适用于左操作数是系统变量的场景
//因为成员无法在系统变量中添加类成员函数,只能靠全局函数来实现
//链式编程的本质是:函数返回值当左值
class Point
{
public:
//注意友元函数中,返回值不同,友元函数就会不同,跟函数重载有区别
friend ostream & operator<<(ostream &out, Point& pin);
Point(int x,int y){
this->x = x;
this->y = y;
}
Point(Point &p){
this->x = p.x;
this->y = p.y;
cout << "拷贝构造函数被执行了1" << endl;
}
~Point(){
cout << "析构函数被执行了2" << endl;
}
void PrintfA(){
cout << "x=" << this->x << endl;
cout << "y=" << this->y << endl; } private:
int x;
int y;
}; //第一个版本(非链式编程)
/*
void operator<<(ostream &out, Point& pin){
out << "x=" << pin.x << endl;
out << "y=" << pin.y << endl;
}
*/ //第二个版本(链式编程)
ostream & operator<<(ostream &out, Point& pin){
out << "x=" << pin.x << endl;
out << "y=" << pin.y << endl;
return out;
} void ProtectA(){
Point p1(, );
//需求:我们需要打印这个类对象,而系统无法打印自定义的类,那么我们必须重载<<运算符
//对于二元运算符,补充一点,两个操作数的位置也很关键
//例如:cout << p1,左操作数是cout,右操作数是p1,如果写成类成员函数 那么必须 cout.operator<<(p1)
//这里我们显然无法在cout这个对象对应的类中添加运算符重载,只能使用友元函数
cout << p1;
//步骤1:首先承认运算符重载是一个函数,写出函数名
//operator<<()
//步骤2:根据操作数,写出参数列表
//operator<<(cout,p1)
//步骤3:根据业务完成函数返回值,以及实现函数
//void operator<<(cout,p1) cout的类型是 ostream //现在开始引入链式编程
//对于 cout << p1<<"asdfasdfas"<<endl;
//cout << p1 << "asdfasdfas" << endl; 报错 error C2296: “<<”: 非法,左操作数包含“void”类型
//意思是 void类型没有重载运算符<<,而实际上cout << p1函数应该返回cout变量,那么就可以实现输出"asdfasdfas"
//因此修改产生版本二
cout << p1 << "asdfasdfas" << endl;
} void main(){
ProtectA();
system("pause");
}
C++ 运算符重载三(链式编程)的更多相关文章
- 从零开始学 Web 之 jQuery(三)元素操作,链式编程,动画方法
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- jQuery插件编写及链式编程模型
jQuery插件编写及链式编程模型小结 JQuery极大的提高了我们编写JavaScript的效率,让我们可以愉快的编写代码,做出各种特效.大多数情况下,我们都是使用别人开发的JQuery插件,今天我 ...
- 从零开始学 Web 之 jQuery(七)事件冒泡,事件参数对象,链式编程原理
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- iOS:用Block写一个链式编程
一.介绍 链式编程是一个比较新颖的编程方式,简单直观,用起来也比较舒服.目前比较有名的Mansory和BabyBlueTooth就是使用链式编程写的第三方框架. 二.写法 链式编程写法不同于传统方式, ...
- iOS利用block实现链式编程方法(Objective-C链式编程)
objc利用block实现链式编程方法 因为不好读.block和其他语言的匿名函数一样,很多程序员刚开始很难主动去用他. 本文描述block作为属性的实际使用,看懂block,并讲解如何利用block ...
- jQuery支持链式编程,一句话实现左侧table页+常用筛选器总结
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- 由表单验证说起,关于在C#中尝试链式编程的实践
在web开发中必不可少的会遇到表单验证的问题,为避免数据在写入到数据库时出现异常,一般比较安全的做法是前端会先做一次验证,通过后把数据提交到后端再验证一次,因为仅仅靠前端验证是不安全的,有太多的htt ...
- iOS 链式编程探索(Masonry)
看了几篇关于链式编程的文章,还是理解的不透彻,我想这可能是因为我自己对block掌握的不熟练. 我已经明白了,所以,和大家分享一下我的理解!如有问题,麻烦大家指出! 直接看代码吧!关键的注释都有. 我 ...
- ASP.NET MVC学前篇之扩展方法、链式编程
ASP.NET MVC学前篇之扩展方法.链式编程 前言 目的没有别的,就是介绍几点在ASP.NETMVC 用到C#语言特性,还有一些其他琐碎的知识点,强行的划分一个范围的话,只能说都跟MVC有关,有的 ...
随机推荐
- SQL Server 之 与 OVER() 函数
在SQL SERVER 2005/2008支持两种排名开窗函数和聚集开窗函数. 一. OVER() 函数 语法结构:OVER( [ PARTITION BY ... ] [ ORDER BY ... ...
- Unity 事件2
UIMouseEvent.cs: using UnityEngine; using System; public abstract class UIMouseEvent : MonoBehaviour ...
- JavaScript 数组方法处理字符串 prototype
js中数组有许多方法,如join.map,reverse.字符串没有这些方法,可以“借用”数组的方法来处理字符串. <!doctype html> <html lang=" ...
- HttpClient 解说 (1) 基础
前言 超文本传输协议(HTTP)或许是当今互联网上使用的最重要的协议了. Web服务,有网络功能的设备和网络计算的发展,都持续扩展了HTTP协议的角色,超越了用户使用的Web浏览器范畴.同一时候,也添 ...
- DBA 需要知道N种对数据库性能的监控SQL语句
--DBA 需要知道N种对数据库性能的监控SQL语句 -- IO问题的SQL内部分析 下面的DMV查询可以来检查当前所有的等待累积值. Select wait_type, waiting_tasks_ ...
- fopen /open,read/write和fread/fwrite区别
fopen /open,read/write和fread/fwrite区别 转载URL:http://hi.baidu.com/%B9%C8%C9%F1%B2%BB%CB%C0jdp/ ...
- pdf+iphone+wechat
可能很多人要问,为啥标题取这个名字. 因为今天在这个上面踩了太多坑.. 我们的需求其实很简单.做一个页面,把pdf文档嵌进去,在线显示. 如此需求,放在PC上chrome浏览器,一个embed标签就搞 ...
- linux内核——TSS
task state segment,任务状态段. 关于每个cpu对应不同TSS段的问题,如下解释: TSS段主要用在当前的任务从用户态切入内核态时去找到该任务的内核堆栈. 多核上的任务是真正的并发, ...
- 理解Load Average做好压力测试(转)
转载自:http://www.blogjava.net/cenwenchu/archive/2008/06/30/211712.html SIP的第四期结束了,因为控制策略的丰富,早先的的压力测试结果 ...
- 快速激活JetBrains系列产品
本篇文章由:http://xinpure.com/quickly-activate-the-jetbrains-products/ lanyus.com 域名已被全面封杀,大家可以到 http://i ...