C++ 在类中包装 cin 和 cout - 重载 << 和 >> 运算符

标签 c++ stream operator-overloading cout cin

我正在尝试创建一个控制台类。我想包装 cincout在类里面重载 <<>>运营商。所以我可以这样使用类:

// Output
Console << "Call cout from Console" << endl;

// Input
string str;
Console >> str; // Call cin

我最好的猜测是:

class Console {
//...
public:
    ostream& operator<< (ostream& os)
    {
        cout << os;
        return &cout;
    }
    //...
};

但我知道那是错误的,我怎么能重载运算符以将控制台类同时用作 cincout

最佳答案

我得到了一个可以处理流操纵器的工作代码。你可以看到我的代码在运行 in this Ideone page

代码如下:

#include <iostream>

typedef std::ostream& (*manip) (std::ostream&);

class console {

};

template <class T> console& operator<< (console& con, const T& x) { std::cout << x; return con; }
template <class T> console& operator>>(console& con,  T& x) { std::cin >>x; return con; }
console& operator<< (console& con, manip manipulator){ std::cout<<manipulator; return con;}

int main() {
    console c;
    int a,b;
    c>>a>>b;
    c << "hello world"<<std::endl<<std::hex<<(a+b)<<std::endl;
}

感谢@MooingDuck 的讨论让我找到了可行的答案,感谢@111111 作为起点。

关于C++ 在类中包装 cin 和 cout - 重载 << 和 >> 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12433055/

相关文章:

c++ - 仅当程序处于焦点时退出循环的关键监听器(c++)

c++ - ios::adjustfield 的目的是什么?

c++ - iostream 插入器和提取器可以是类成员而不是全局重载吗?

c++ - 数据包大小

c++ - 结构上的 std::replace_if

具有特殊按键布局的 C++ 按键记录器

javascript - Tokbox 停止屏幕共享不起作用

c# - 为什么 Stream.ReadByte 返回 int?

c++ - 运算符重载 : Ostream/Istream