sách gpt4 ai đã đi

Làm thế nào để quá tải <<>

In lại 作者:行者123 更新时间:2023-12-02 09:48:36 28 4
mua khóa gpt4 Nike

Tôi có một cáiBitset类,用于存储chars的vectơ,并且我希望每当使用cout << char时,只要该类的一部分将char转换为短int即可。
Mã số:
模板
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]转换为简短形式,但也不要将 'Một'转换为简短形式。

1 Câu trả lời

您不能重载toán tử<<,以使char表现出您想要的方式。它不知道char的来源,因此它的行为不会因来源而异。
要使此功能按您想要的方式工作,您必须使Bitset实现自己的toán tử[]并返回一个代理对象,然后可以对该代理重载toán tử<<,Ví dụ:

template
class Bitset
{
riêng tư:
std::vector bits = std::vector ((X+7)/8);

công cộng:
/* constructors */

class BitProxy
{
riêng tư:
unsigned char &bit;

công cộng:
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(static_cast(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
Bài viết được đề xuất: c++ - 在链表中移动和复制构造函数
Bài viết được đề xuất: vba - 在Excel中添加列
Bài viết được đề xuất: Oracle DBMS_SCHEDULER 在一周中每天的上午 8 点、中午 12 点、下午 4 点和晚上 8 点运行
Bài viết được đề xuất: u-boot - 启动时运行 u-boot 命令
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com