非成员运算符

当操作者的左侧是不同的类时。运算符重载不可能是正确的类中。

IostreamOperatorOverloading.cpp

/**

* 书本:【ThinkingInC++】

* 功能:非成员运算符

* 时间:2014年10月4日14:23:25

* 作者:cutter_point

*/

//当运算符的左側是不同的类的时候,就不能吧运算符重载到类里面了。

#include"../require.h"

#include<iostream>

#include<sstream>

#include<cstring>

usingnamespace std;

classIntArray

{

    enum {sz=5};

    int i[sz];

public:

    //吧数组i初始化,吧数组里面sz*sizeof(*i)个数初始化为0

    IntArray() {memset(i, 0, sz*sizeof(*i)); }

    //重载[]操作符

    //这个左側參数是这个类,也就是IntArray[x]代表者i[x];

    int& operator [] (int x)

    {

        require(x >= 0 && x < sz,"IntArray::operator[] out of range");

        return i[x];

    }

    //两个友元函数

    friend ostream& operator <<(ostream& os, const IntArray& ia);

    friend istream& operator >>(istream& is, IntArray& ia);

};

ostream&operator << (ostream& os, const IntArray& ia)

{

    for(int i=0 ; i<ia.sz ; ++i)

    {

        os<<ia.i[i];

        if(i != ia.sz-1)

            os<<", ";

    }

    os<<endl;

    return os;

}

//输入友元

istream&operator >> (istream& is, IntArray& ia)

{

    for(int i=0 ; i<ia.sz ; ++i)

        is>>ia.i[i];

    return is;

}

int main()

{

    stringstream input("47 34 56 92103");  //吧字符流和这个string绑定

    IntArray I;

    input>>I;   //吧绑定的字符串输入到I中。每次以空格隔开

    I[4]=-1;

    cout<<I;

    return 0;

}

请恭喜我的叔叔

【ThinkingInC++】61、非成员运算符的更多相关文章

  1. Python中的运算符

    说完常用的数据类型,再来说下运算符.运算符用于将各种类型的数据进行运算,让静态的数据跑起来. 编程语言中的运算大致分为以下几个大类: 算术运算, 用于加减乘除等数学运算 赋值运算,用于接收运算符或方法 ...

  2. 【转】Python中的运算符

    [转]Python中的运算符 说完常用的数据类型,再来说下运算符.运算符用于将各种类型的数据进行运算,让静态的数据跑起来. 编程语言中的运算大致分为以下几个大类: 算术运算, 用于加减乘除等数学运算 ...

  3. [C++ Primer] : 第14章: 重载运算符与类型转换

    基本概念 重载运算符是具有特殊名字的函数: 它们的名字由关键字operator和其后要定义的运算符号共同组成. 重载运算符函数的参数数量与该运算符作用的运算对象数量一样多. 对于二元运算符来说, 左侧 ...

  4. 【C++】C++中重载运算符和类型转换

    输入输出运算符 输入输出运算符 输入输出运算符 算术和关系运算符 相等运算符 关系运算符 赋值运算符 复合赋值运算符 下标运算符 递增和递减运算符 成员访问运算符 函数调用运算符 lambda是函数对 ...

  5. C++——使用类

    一.运算符重载 1.运算符重载 C++允许将运算符重载扩展到用户定义的类型. 要重载运算符,需使用被称为运算符函数的特殊函数形式.运算符函数的格式如下: operatorop(argument lis ...

  6. Tomcat启动过程原理详解

    基于Java的Web 应用程序是 servlet.JSP 页面.静态页面.类和其他资源的集合,它们可以用标准方式打包,并运行在来自多个供应商的多个容器.Web 应用程序存在于结构化层次结构的目录中,该 ...

  7. python之第一个例子hello world

    python用缩进(四个空格,不是teble)来区分代码块 1. coding=utf-8    字符编码,支持汉字 #!/usr/bin/env python# coding=utf-8print ...

  8. 参数依赖查找(ADL,Argument-dependent lookup)

    参数依赖查找(Argument-dependent lookup),又称 ADL 或 Koenig 查找,是一组于函数调用表达式查找非限定函数名的规则,包含对重载运算符的隐式函数调用.在通常非限定名称 ...

  9. C++笔记--抽象机制

    类 一个类就是一个用户定义类型 一个结构体也是一种类.(成员函数),因为不同的结构体中可能会有相同的名字的成员函数,所以我们在定义成员函数的时候就必须给出有关结构体的名字 void Data::ini ...

随机推荐

  1. MySQL错误:You are using safe update mode and you tried to update a table without a WHERE that uses a K

    转载自:http://blog.csdn.net/dragonpeng2008/article/details/7279590 Error: 1175 SQLSTATE: HY000 (ER_UPDA ...

  2. Android内存管理

    首先Android理机制相当复杂.想要讲清楚比較困难.其次对于绝大多数用户来说.仅仅关心内存够不够用,至于内存怎样管理的这样的技术细节,不是用户须要去考虑的,写这样一个专题有没有意义?毕竟我们是用手机 ...

  3. A Game of Thrones(13) - Tyrion

    The north went on forever. Tyrion Lannister knew the maps as well as anyone, but a fortnight on the ...

  4. 联系我们_鲲鹏Web数据抓取 - 专业Web数据采集服务提供者

    联系我们_鲲鹏Web数据抓取 - 专业Web数据采集服务提供者 首页 > 联系我们 我们的联系方式如下: 029 - 82542052(陕西 西安) 13389148466 或 13571845 ...

  5. Android 检測网络是否连接

    权限: <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>  <u ...

  6. 在word 中复选框划勾或叉的方法

    输入大写字母R.大写字母Q ,然后将字体改为Wingdings 2, 就分离得到带框的勾和叉.

  7. Help Johnny-(类似杭电acm3568题)

    Help Johnny(类似杭电3568题) Description Poor Johnny is so busy this term. His tutor threw lots of hard pr ...

  8. linux+nginx+mysql+php

    LNMP(linux+nginx+mysql+php)服务器环境配置   一.简介 Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为 “engine X”, 是一个高性能的 ...

  9. Home · chineking/cola Wiki

    Home · chineking/cola Wiki Home Cola Cola是一个分布式的爬虫框架,用户只需编写几个特定的函数,而无需关注分布式运行的细节.任务会自动分配到多台机器上,整个过程对 ...

  10. HTML5游戏开发进阶指南

    <HTML5游戏开发进阶指南> 基本信息 作者: (印)香卡(Shankar,A.R.)    译者: 谢光磊 出版社:电子工业出版社 ISBN:9787121212260 上架时间:20 ...