gpt4 book ai didi

c++ - 如何重载<<操作符,使其仅影响类的成员?

转载 作者:行者123 更新时间:2023-12-02 09:48:36 28 4
gpt4 key购买 nike

我有一个Bitset类,用于存储chars的vector,并且我希望每当使用cout << char时,只要该类的一部分将char转换为短int即可。
代码:
模板
Bitset类
{
public:std::vector <无符号字符> bit = std::vector <无符号字符>((X + 7)/ 8);

上市:
/ *构造函数* /

friend std::ostream&operator <<(std::ostream&output,const char x);
};

std::ostream&operator <<(std::ostream&output,const char x)
{
输出<<(短)[x);
返回输出;
}

这个想法是,如果我写:
位集a;
/ *代码* /
cout << a.bit [x];
cout <<'a';

我想将 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com