读书人

系列C++有关问题之一:运算符重载

发布时间: 2012-02-14 19:19:19 作者: rapoo

系列C++问题请教高手之一:运算符重载
1。看了http://www.codeproject.com/cpp/cout_color.asp,有些不解的地方:
对于cout < < "Hello " < <endl;这样一个语句:哪一个是函数哪一个参数,记得看Bjane的《C++语言程序设计》一书有一处讲到这一个问题:大意是cout < < "Hello " < <endl;
转换为:cout.operator < <( "Hello ").operator < <(endl);,记得不太清楚,不太明白。请高手讲解一下:
哪一个是函数哪一个参数?

2。如果是这样如http://www.codeproject.com/cpp/cout_color.asp所示:std::cout < < green < < "This text is written in green " < < white < < std::endl;
这样一个语句呢?


[解决办法]
cout.operator < <( "Hello ").operator < <(endl);
也可能是operator < <(cout, "Hello ");
operator < <(cout, endl);
总之,operator < <是函数。cout等是参数。
[解决办法]
basic_ostream& operator < <(
basic_ostream& (*_Pfn)(basic_ostream&)
);
basic_ostream& operator < <(
ios_base& (*_Pfn)(ios_base&)
);
basic_ostream& operator < <(
basic_ios <Elem, Tr> & (*_Pfn)(basic_ios <Elem, Tr> &)
);
basic_ostream& operator < <(
basic_streambuf <Elem, Tr> *_Strbuf
);
basic_ostream& operator < <(
bool _Val
);
basic_ostream& operator < <(
short _Val
);
basic_ostream& operator < <(
unsigned short _Val
);
basic_ostream& operator < <(
int _Val
);
basic_ostream& operator < <(
unsigned int _Val
);
basic_ostream& operator < <(
long _Val
);
basic_ostream& operator < <(
unsigned long _Val
);
basic_ostream& operator < <(
float _Val
);
basic_ostream& operator < <(
double _Val
);
basic_ostream& operator < <(
long double _Val
);
basic_ostream& operator < <(
const void *_Val
);

应该明白了吧!
[解决办法]
1。看了http://www.codeproject.com/cpp/cout_color.asp,有些不解的地方:
对于cout < < "Hello " < <endl;这样一个语句:哪一个是函数哪一个参数,记得看Bjane的《C++语言程序设计》一书有一处讲到这一个问题:大意是cout < < "Hello " < <endl;
转换为:cout.operator < <( "Hello ").operator < <(endl);,记得不太清楚,不太明白。请高手讲解一下:
哪一个是函数哪一个参数?
============================================
taodm
[解决办法]
因为 < <的定义是这样,返回一个ostream的引用,所以它支持连续的 < <调用,例如

ostream& operator < <(ostream& os,const MyClass A)
{
os < <A.x < < " " < <A.y;
return os; //又将这个os返回去了
}
所以在cout < <A < <B中,cout < <A的类型是os,即(cout < <A) < <B, 相当于os < <B,就这样连续的输出了
函数就是 < <, 返回类型是cout, (cout本身就是ostream的对象,也就是和os一样的),参数是A和B.

希望对你有点帮助,呵呵

[解决办法]
#include <iostream>
using namespace std;
int main()
{
cout < < "helloworld " < <endl;
const char *s= "helloworld ";
cout.operator < <(s) < <(endl);
cout < <hex < <(unsigned long)s < <endl;
/* DEV C++ 编译结果如下
helloworld


0x44000
44000
*/
system( "PAUSE ");

}

[解决办法]
cout.operator < <( "Hello ").operator < <(endl);,
cout是ostream类的一个对象名称,operator < <是这个对象的成员函数,这个函数的返回值的类型是ostream,,也就是说然后返回值是ostream这个类的一个对象,然后这个对象再调它的成员函数operator < <。

std::cout < < green < < "This text is written in green " < < white < < std::endl;
只不过加了个名称空间,和上面差不多,

[解决办法]
既然 operator < <是函数。cout等是参数,那么为什么不是 < <(cout, "Hello ");这样的语句呢?--我先学C的,对C++的语法一时转不过弯来。。。。
--为什么参数可以写在函数名的前面??--除了Cout这一个之外,还有别的例子吗?


“为什么不是 < <(cout, "Hello ")”, 这句话已经比较贴近真实了。编译器在对代码进行转化后,基本上就是这个形式的调用. 隐含this指针的作用,建议看点这方面的东西
[解决办法]
建议看看这个文章
http://blog.csdn.net/FantasiaX/archive/2007/01/09/1478576.aspx

读书人网 >C++

热点推荐