//运算符重载之链式编程
#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++ 运算符重载三(链式编程)的更多相关文章

  1. 从零开始学 Web 之 jQuery(三)元素操作,链式编程,动画方法

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  2. jQuery插件编写及链式编程模型

    jQuery插件编写及链式编程模型小结 JQuery极大的提高了我们编写JavaScript的效率,让我们可以愉快的编写代码,做出各种特效.大多数情况下,我们都是使用别人开发的JQuery插件,今天我 ...

  3. 从零开始学 Web 之 jQuery(七)事件冒泡,事件参数对象,链式编程原理

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  4. iOS:用Block写一个链式编程

    一.介绍 链式编程是一个比较新颖的编程方式,简单直观,用起来也比较舒服.目前比较有名的Mansory和BabyBlueTooth就是使用链式编程写的第三方框架. 二.写法 链式编程写法不同于传统方式, ...

  5. iOS利用block实现链式编程方法(Objective-C链式编程)

    objc利用block实现链式编程方法 因为不好读.block和其他语言的匿名函数一样,很多程序员刚开始很难主动去用他. 本文描述block作为属性的实际使用,看懂block,并讲解如何利用block ...

  6. jQuery支持链式编程,一句话实现左侧table页+常用筛选器总结

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  7. 由表单验证说起,关于在C#中尝试链式编程的实践

    在web开发中必不可少的会遇到表单验证的问题,为避免数据在写入到数据库时出现异常,一般比较安全的做法是前端会先做一次验证,通过后把数据提交到后端再验证一次,因为仅仅靠前端验证是不安全的,有太多的htt ...

  8. iOS 链式编程探索(Masonry)

    看了几篇关于链式编程的文章,还是理解的不透彻,我想这可能是因为我自己对block掌握的不熟练. 我已经明白了,所以,和大家分享一下我的理解!如有问题,麻烦大家指出! 直接看代码吧!关键的注释都有. 我 ...

  9. ASP.NET MVC学前篇之扩展方法、链式编程

    ASP.NET MVC学前篇之扩展方法.链式编程 前言 目的没有别的,就是介绍几点在ASP.NETMVC 用到C#语言特性,还有一些其他琐碎的知识点,强行的划分一个范围的话,只能说都跟MVC有关,有的 ...

随机推荐

  1. es6- ArrayBuffer

    ArrayBuffer对象.TypedArray视图和DataView视图是 JavaScript 操作二进制数据的一个接口. 简单说: ArrayBuffer对象代表原始的二进制数据, TypedA ...

  2. Linux 监测CPU常用的工具sar iostat vmstat top uptime

    sar -u 1 2 iostat -c 1 2 vmstat 1 2 top uptime Linux监控CPU整体性能常用的工具有: # mpstat: mpstat 不但能查看所有CPU的平均信 ...

  3. Some web Address

    1.可视化算法(Data Structure Visualizations) https://www.cs.usfca.edu/~galles/visualization/Algorithms.htm ...

  4. 安卓平台ARM Mali OpenCL例子-灰度转换(转)

    手头一块RK3288的板子,在板子上测试了一张1080p的彩色图灰度转换的OpenCL例子.OpenCL没有任何优化.例子请移步这里. 该例子是编译成安卓平台下的可执行程序. 进入jni文件夹,进行如 ...

  5. oracle的check约束

    check约束是指检查性约束,使用check约束时.将对输入的每个数据进行检查,仅仅有符合条件的记录才会被保存到表中,从而保证了数据的有效性和完整性.      check约束既有下面的四个特点: 在 ...

  6. Windows Phone ProgressRing 控件

    在windows phone 8中,只有ProgressBar的控件,而没有圆环形的等待控件.今天我突发奇想,从Windows Store 的ProgressRing控件上copy下来的XAML 代码 ...

  7. 【划分树+二分】HDU 4417 Super Mario

    第一次 耍划分树.. . 模板是找第k小的 #include <stdio.h> #include <string.h> #include <stdlib.h> # ...

  8. knockoutjs -- applyBinding & Observables

    applyBindings ko.applyBindings(myViewModel); // Knockout调用applyBindings激活myViewModel(即把myViewModel和V ...

  9. windows系统同时连接多个openvpn账户

    windows系统同时连接多个openvpn账户. 前提 客户端系统:Windows7 64位 OpenVPN版本:OpenVPN 2.3.10 Windows 64位 一.安装 1.安装目录 D:\ ...

  10. mysql的grant用法(转)

    GRANT USAGE ON *.* TO 'discuz'@'localhost' IDENTIFIED BY PASSWORD '*C242DDD213BE9C6F8DA28D49245BF69F ...