0 c++ operator-overloading ostream
例如,如果我想要一个默认的输出版本<<和一个详细的版本。
myClass myObject(//Constructor parameters);
cout << myObject << "\n";
cout << myObject.detailed << "\n";
Run Code Online (Sandbox Code Playgroud)
我尝试在我的班级中制作一个修改器,但这似乎不起作用。
class myClass {
public:
friend std::ostream& operator<<(std::ostream& output, const myClass& myObject);
std::ostream& detailed(std::ostream& output);
}
Run Code Online (Sandbox Code Playgroud)
这给出了错误“必须调用对非静态成员函数的引用”。
下面是根据 iostreams 设计应该如何完成的。
#include <iostream>
class MyClass
{
static const int flagId; // private format flag
public:
int x, y; // for exposition only
static std::ios_base& detailed(std::ios_base& str) {
str.iword(flagId) = true;
return str;
}
static std::ios_base& abridged(std::ios_base& str) {
str.iword(flagId) = false;
return str;
}
friend std::ostream& operator<< (std::ostream& stream, const MyClass& myClassObj) {
if (stream.iword(flagId)) {
stream << "X=" << myClassObj.x << " Y=" << myClassObj.y;
// optionally reset the flag to false
} else {
stream << myClassObj.x;
}
return stream;
}
};
const int MyClass::flagId = std::ios_base::xalloc();
int main()
{
MyClass myObject{1, 42};
std::cout << MyClass::detailed << myObject << "\n";
std::cout << MyClass::abridged << myObject << "\n";
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
187 次 |
| 最近记录: |