gpt4 book ai didi

C++:重载 = 运算符以创建 uint8_t 兼容数据类型

转载 作者:太空宇宙 更新时间:2023-11-04 16:06:09 26 4
gpt4 key购买 nike

我认为这应该是相当微不足道的:

我写了一个类来处理二进制编码的十进制 (BCD) 8 位值。
该类具有 set()、get()、add()、sub() 等方法。完美运行。
get() 示例:

class bcd8_t {
public:
uint8_t get() { return value_u8; }
private:
uint8_t value_u8;
};

现在我想把这个类转换成一个新的数据类型。我基本上想更换类似

的东西
bcd8_t  a;  
uint8_t b = a.get();

通过类似的东西

bcd8_t  a;  
uint8_t b = (uint8_t)a;

所以我希望我可以编写一个重载的“=”运算符来返回一个 uint8_t,例如:

class bcd8_t {
public:
uint8_t operator=() { return value_u8; }
private:
uint8_t value_u8;
};

但是,编译器告诉我的一切都是我尝试过的

cannot convert 'bcd8_t' to 'uint8_t'  

invalid cast from type 'bcd8_t' to type 'uint8_t'

如何做到这一点?

最佳答案

赋值运算符是将赋给你的类。

要转换类的对象,您需要实现类型转换运算符:

class bcd8_t {
public:
...
operator uint8_t() const { return value_u8; }
...
};

对于您作为成员函数实现的所有二元运算符(对于二元运算符,我指的是那些接受两个操作数的运算符,例如赋值、比较、加法等)那么您的类对象总是 运算符的左侧。

让我们以赋值运算符为例。如果您重载类中的赋值运算符并执行类似

bcd8_t a;
any_type b;
...
a = b;

然后编译器会将赋值转换为

a.operator=(b);

对于作为成员函数重载的所有运算符都是一样的。

此外,某些运算符(包括赋值运算符)只能作为成员函数实现。赋值运算符不能有非成员函数重载,这是不允许的。

参见例如this operator overloading reference获取更多信息。

关于C++:重载 = 运算符以创建 uint8_t 兼容数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34918132/

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