paip.提升用户体验----自定义<<移位操作符重载
paip.提升用户体验----自定义<<移位操作符重载
作者Attilax , EMAIL:1466519819@qq.com
来源:attilax的专栏
地址:http://blog.csdn.net/attilax
<<移位操作符重载..可以让代码更加自然..提升用户体验..
头文件
//////////////////
#ifndef QDEBUGHIDEC9_H
#define QDEBUGHIDEC9_H
#include <ostream>
#include <iostream>
#include "windows.h"
//#include<iostream.h>
// extern ostream PrintAti;
class qDebugHideC9
{
public:
qDebugHideC9();
public:
const qDebugHideC9& operator<<(char* str)const;//对字符串型的重载
const qDebugHideC9& operator<<(HWND str)const ;//对字符串型的重载
const qDebugHideC9& operator<<(WINBOOL str) const;//对字符串型的重载
};
#endif // QDEBUGHIDEC9_H
cpp文件
////////////////////////
#ifndef QDEBUGHIDEC9_cppx
#define QDEBUGHIDEC9_cppx
#pragma once
#include "qdebughidec9.h"
qDebugHideC9::qDebugHideC9()
{
//return *this;
}
const qDebugHideC9& qDebugHideC9::operator<<(char*str)const
{
//printf("%s",str);
return *this;//同样,这里也留意一下……
}
const qDebugHideC9& qDebugHideC9::operator<<(HWND str)const
{
//printf("%s",str);
return *this;//同样,这里也留意一下……
}
const qDebugHideC9& qDebugHideC9::operator<<(WINBOOL str) const
{
//printf("%s",str);
return *this;//同样,这里也留意一下……
}
qDebugHideC9 PrintAti;
#endif
调用手册
////////////////
#include <qdebughidec9.cpp>
qDebugHidec922<<"--";
参考:
///////////////////////
cout_百度百科.htm
嗯,我们已经基本上看出了cout的实质,不妨动动手,自己来实现一个cout的简化版(Lite),为了区分,我们把我们设计的cout对象命名的myout,myout对象所属的类为MyOutstream。我们要做的就是为MyOutstream类重载一系列不同类型的operator<<运算符函数,简单起见,这里我们仅实现了对整型(int)与字符串型(char*)的重载。为了表示与iostream断绝关系,我们不再用头文件iostream,而使用古老的stdio中的printf函数进行输出,程序很简单,包括完整的main函数,均列如下:
即,即使进行运算符重载,也只是有限自由!
friend ostream & operator << (ostream &os, const CPolynomial&)
operator是进行运算符重载的关键词,它后面就是重载的运算符,左侧是流,右侧是流处理的对象。这样你就可以处理如何输入或输出该对象
楼上说的是对的~~
一般在重载的时候用的上这个格式
ostream& operator<<(ostream &,XX);
[cpp] view plaincopy
friend ostream & operator <<(ostream & output,const PhoneNumber &);
friend istream & operator >>(istream & input,PhoneNumber &);
操作符重载函数包含两个参数,一个是对istream/ostream的引用,另一个是对用户自定义 类型的引用,当编译器遇到语句 cin>>phone时,编译器将生成函数调用operator>>(cin,phone) 同样,编译器督导cout<<phone时,编译器将生成函数调用operator<<(cout,phone) 同样,编译器督导cout<<phone时,编译器将生成函数调用operator<<(cout,phone)
2)注意友元函数不是类的成员函数,所以友元函数的实现和普通函数一样,在实现时不用"::"指示属于哪个类,只有成员函数才使用"::"作用域符号;