我有一个Bitset类,用于存储chars的vector,并且我希望每当使用cout << char时,只要该类的一部分将char转换为短int即可。 代码:模板Bitset类{ public:std::vector bit = std::vector ((X + 7)/ 8); 上市: / *构造函数* / friend std::ostream&operator std::ostream&operator 输出}这个想法是,如果我写:位集a;/ *代码* /cout cout 我想将a.bit[x]转换为简短形式,但也不要将'a'转换为简短形式。 最佳答案 您不能重载operator<<,以使char表现出您想要的方式。它不知道char的来源,因此它的行为不会因来源而异。要使此功能按您想要的方式工作,您必须使Bitset实现自己的operator[]并返回一个代理对象,然后可以对该代理重载operator<<,例如:template<long long X>class Bitset{private: std::vector<unsigned char> bits = std::vector<unsigned char> ((X+7)/8);public: /* constructors */ class BitProxy { private: unsigned char &bit; public: BitProxy(unsigned char &bit) : bit(bit) {} BitProxy& operator=(unsigned char x) { bit = x; return *this; } operator unsigned char() const { return bit; } }; BitProxy operator[](size_t index) { return BitProxy(bits[index]); } friend std::ostream& operator<< (std::ostream &output, const BitProxy &x) { output << static_cast<short>(static_cast<unsigned char>(x)); return output; }};Bitset a;// populate a as needed...cout << a[x];cout << 'a'; Live Demo关于c++ - 如何重载<<操作符,使其仅影响类的成员?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62544163/