c++求operator<<的例子

我估计是要重载流输出运算符<<,好比cout<<a;原来的形式是 operator<<(cout,a); 因为<<须要用到两个类,一个是ostream类,cout就是他的对象,是负责输出的类;另外一个是用户自定义类。ios

因此重载是应该用 友元函数 重载。以下:c++

1函数

2spa

3指针

4code

5对象

6ci

7编译器

8io

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

#include <iostream>

using namespace std;

 

class Date

{

friend ostream& operator<<(ostream&,const Date&);

  

    int year;

    int month;

    int day;

public:    

    Date() {year=2013; month=9; day=30;}

};

 

ostream& operator<<(ostream& out,const Date& date)

{

    out<<date.year<<'-'<<date.month<<'-'<<date.day;

    return out;

}

 

int main()

{

    Date date;

    cout<<date<<endl;

    system("pause"); 

}

注意上面的ostream& operator<<(ostream& out,const Date& date)的3个引用&,

1. 第一个ostream&,返回的是ostream类对象的引用,为了进行连续的运算,如cout<<a<<b;

先进行cout<<a,运算玩了,返回cout的引用,就是返回了cout自己,原来的式子变为cout<<b;

这样就能连续写了,cout<<a<<b<<c<<........

2. 第二个ostream& out, out是随便取的名字,就是ostream类的对象,与cout用法同样,经过<<将数据传到out里,因此输出时用cout<<a,这时就调用 operator<<(cout,a), 把cout做为参数传入。对于上述例子cout<<date<<endl;,就是执行了cout<<date.year<<'-'<<date.month<<'-'<<date.day;   return cout;(注意,这里就是cout,其中year等是基本类型,c++已经写好了)

再次说明cout并不特殊,就是预先定义好了的ostream类的对象。

3. 第三个const Date&,主要为了快速出入参数,若是不用&,将会复制一个参数,而不是将原来的对象直接传入,就会调用拷贝构造函数(若是没写的话编译器自动提供),浪费时间,有时还会产生错误,好比数据成员里有指针时,编译器提供的拷贝构造函数将会自动复制 一个指针,与原来的指针指向同一个地址,这样改变一个另外一个也会改变,这是咱们不想要的,咱们须要拷贝时指针指向不一样的地址,两个对象互不干扰,只是指针所指变量的值相等就行,这就须要本身写 拷贝构造函数,本身new等。  因此通常用&,加const防止意外修改。

相关文章
相关标签/搜索