c++求operator<<的例子

用operator对<<重载,请问谁能举个简单的程序例子... 用operator对<<重载,请问谁能举个简单的程序例子 展开
 我来答
hyfatbd
推荐于2017-12-12 · TA获得超过237个赞
知道小有建树答主
回答量:149
采纳率:100%
帮助的人:114万
展开全部

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

所以重载是应该用 友元函数 重载。如下:

#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防止意外修改。

亚马逊选品管家
2013-09-30 · TA获得超过643个赞
知道小有建树答主
回答量:805
采纳率:100%
帮助的人:285万
展开全部
// 这个例子将字符串左移n位,然后左面补空格

using namespace std;

class BitString
{
public:
BitString(char *str);

const char* operator<<(int bit);

private:
char m_str[200];
};

BitString::BitString(char *str)
{
strcpy(m_str, str);
}

const char* BitString::operator<<(int bit)
{
int len = strlen(m_str);
if(bit >= len)
{// 如果左移超过字符串长度,则直接至为空格即可
for(int i = 0; i < len; ++i)
{
m_str[i] = ' ';
}
return m_str;
}
// 先左移字符串
for(int i = 0; i < len - bit; ++i)
{
m_str[i] = m_str[i + bit];
}
for(int i = len - bit; i < len; ++i)
{
m_str[i] = ' ';
}
return m_str;
}

int main( void )
{
BitString bs("哈哈哈123456");
bs<<4;
system("pause");
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
gty55044
2013-09-30
知道答主
回答量:20
采纳率:0%
帮助的人:6.5万
展开全部
假如有个复数类,重载“+”为此函数的友元函数friend complex operator+(complex c1,complex c2);如下定义:

complex operator+(complex c1,complex c2)
{return complex(c2.real+c1.real,c2.imag+c1.imag);}
要是定义“+”为复数类的成员函数这样定义:
complex operator+(complex c)
{return complex(real+c.real,imag+c.imag);}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式