运算符重载似乎对cout起到了双向作用
Operator overloading seems to work both ways for cout?
我一直在C++中修改类和运算符重载,最近我发现了一个代码,其中
cout << class_object
和
class_object << cout
如果我使'<lt;'运算符(返回单个类成员)。我的类有一个成员int num和成员函数
ostream& operator << (ostream& os)
{
os << num;
return os;
}
以下函数在类之外定义-
ostream& operator<<(ostream& os, X &class_object)
{
return class_object << os ;
}
(假设X是类)
知道为什么它有效吗?我好像想不通。此外,为什么两个函数定义对于<lt;(一个在教室外,一个在里面)?有没有办法让它在没有这个的情况下工作?如果你不介意的话,我很想结束一下它的工作原理。
成员函数使class_object << cout;
工作,因为成员函数有一个指向对象的指针作为第一个隐式参数。这是错误的,因为它在C++中是违反直觉的。
以下代码:
ostream& operator<<(ostream& os, X &class_object)
{
return class_object << os;
}
利用"反转"成员运算符重载并再次反转它,所以现在运算符<lt;为你的班级双向工作。
唯一合理的代码是:
ostream& operator<<(ostream& os, X &class_object)
{
os << class_object.num;
return os;
}
相关文章:
- 重载运算符 (<<) cout 在 c ++ 中不起作用,当我互相减去两个矩阵时不起作用
- 指针变量在 cout 函数中不起作用
- Cuda 基本程序 (将值写入矩阵和 std:cout 不起作用) ;主功能不启动
- 我正在使用 VS 代码,但 cout 不起作用
- 为什么“运算符<<(cout,double)”不起作用
- 为什么这个 RAII cout 重定向器不起作用:
- 尽管我的功能和cout语句的放置错误,但我的程序为什么会起作用
- 输入字母f或任何字母,并像ABC ABCD ABCDE ABCDEF一样cout字母模式,但仅在我按0时起作用
- 为什么COUT在朋友函数中不起作用,该功能超载了操作员&lt;&lt;这是一个iStream运算符
- 将字符串转换为char,当我cout时,它是正确的,但是当我将chdir与char一起使用时,它不起作用
- Visual Studios Cout <<不起作用
- 为什么 cout 不起作用?
- std::cout::setf 不起作用(setf 到十六进制)
- C getarea()和cout不起作用
- 为什么当注释"cout"时此代码不起作用?
- 如果后跟返回 (C++),则 cout 不起作用
- C++11 和 boost_filesystem cout 和 printf 不起作用
- 将多个整数添加到一个向量索引? 'Cout'不起作用
- C++ cout 字符串不起作用.请指教
- 在 msgget() 之后,cout 或 printf 不起作用