【ThinkingInC++】61、非成员运算符

非成员运算符

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

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;

}

请恭喜我当上了舅舅

时间: 2024-10-11 23:42:33

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

重载运算与类型转换——基本概念,输入和输出运算符,算术和关系运算符,赋值运算符,下标运算符,递增和递减运算符,成员访问运算符

一.基本概念 重载的运算符时具有特殊名字的函数:它们的名字由关键字operator和其后要定义的运算符号共同组成.和其他函数一样,重载的运算符也包含返回类型.参数列表以及函数体. 重载运算符函数的参数数量与该运算符作用的运算对象数量一样多.一元运算符有一个参数,二元运算符有两个.对于二元运算符来说,左侧运算对象传递给第一个参数,而右侧运算对象传递给第二个参数.除了重载的函数调用运算符operator()之外,其他重载运算符不能含有默认实参. 当一个重载的运算符时成员函数时,this绑定到左侧运算

词法规则写法

#include<stdio.h> main() { char n[100],n1[100],n2[100]; int i,i1=0,i2=0,j; printf("请你输入字符串:\n"); gets(n); for(i=0;i<n;i++) { j=(int) n[i]; n1[i]=n[100]; if((j>=65) && (j<=90)||(j>=90) && (j<=122)) { n1[i1]=n[

C++ 笔记(待续)

本文摘自:Thinking in C++ Vol.1  (添加部分C++ primer内容.待续...) 目录: 第零章:help and tips 第一章:对象 第二章:c in c++ 第三章:深入理解字符串 第四.五章:实现的隐藏 第六.七章:初始化和清除 第九章:内联函数 第十章:名字控制 第十一章:引用和拷贝构造函数 第十二章:运算符重载 第零章:help and tips [Index] 安装c/c++的帮助文档:yum install man-pages libstdc++-doc

C++——使用类

一.运算符重载 1.运算符重载 C++允许将运算符重载扩展到用户定义的类型. 要重载运算符,需使用被称为运算符函数的特殊函数形式.运算符函数的格式如下: operatorop(argument list); 例如,operator+()重载+运算符,operator*()重载*运算符.op必须是一个有效的C++运算符,不能虚构一个新的符号. 例如,将Person对象的体重相加,如果per1.per2和perSum都是Person对象,便可编写这样的等式: perSum = per1 + per2

001第一部分[python基础]

一.python基础 数据类型 原始类型:int float byte 复合类型: 由其他原始类型组合起来的类型list dict cuple 运算符和表达式: 算术运算符:         加 / 减 / 乘 / 除 / 取模 / 幂 / 地板除         +    -    *    /     %     **     // python2 的 除:10 / float(20) 位运算符[二进制之间的运算]: bin(60) 转换成二进制数int('1100',2)   将二进制转换

Python修行之路__数据类型

Python3中有六个标准的数据类型: Number(数字) String(字符串) List(列表) Tuple(元组) Dictionary(字典) Set(集合) 在Python中,最基本的数据结构就是序列(sequence).序列的每个元素被分配一个序号—即索引(元素的位置),第一个索引是0,第二个则是1,以此类推. Number(数字) 数值类型: 类型 描述 语法示例 int (整型) 无小数部分的数(python3中只有一种整型类型int(长整型),没有Python2中的Long)

第十五章、重载运算与类型转换

一.基本概念 1.重载运算符是具有特殊名字的函数:由关键字operator和其他要定义的运算符号共同组成 2.重载运算符的参数数量与该运算符作用的运算对象一样多 当一个重载的运算符是成员函数时,this会绑定到左侧运算对象,成员运算符函数的显示参数数量比运算对象的数量少一个 3.对于一个运算符函数,它要么是类的成员,或者至少含有一个类类型的参数 当作用符作用于内置类型的运算对象时,无法改变该运算符的含义 例: //非成员运算符函数的等价调用 data1 + data2: //普通的表达式 ope

【ThinkingInC++】13、输出移位运算符的操作

头文件 /** * 功能:输出移位运算符的操作 * 时间:2014年8月12日20:01:32 * 作者:cutter_point */ #ifndef PRINTBINARY_H_INCLUDED #define PRINTBINARY_H_INCLUDED #include<iostream> using namespace std; void printBinary(const unsigned char val) { for(int i=7 ; i != -1 ; --i) { if(

【ThinkingInC++】25、用sizeof运算符可以确定struct的长度。

/** * 功能:用sizeof运算符可以确定struct的长度. * 时间:2014年8月18日08:10:14 * 作者:cutter_point */ #include"CLib.h" #include"CppLib.h" #include<iostream> using namespace std; struct A { int i[100]; }; struct B { void f(); }; void B::f(){} int main()