gpt4 book ai didi

c++ - 为类对象指定 "return type"

转载 作者:太空宇宙 更新时间:2023-11-04 11:53:52 25 4
gpt4 key购买 nike

我有以下类,它应该代表一个 8 位有符号字符。

class S8
{
private:
signed char val;
public:
S8 & operator=(const signed char other)
{
if ((void*)this != (void*)&other)
{
val = other;
}
return *this;
}
operator signed char() {signed char i; i = (signed char) val; return i;}
void write (OutputArray & w)
{
/* This function is the whole purpose of this class, but not this question */
}
};

但是,当我将负数分配给其中一个对象时,

S8 s;
char c;

s = -4;
c = -4;

printf("Results: %d, %s\n",s,c);

我从 printf 得到“结果:252,-4”。有什么方法可以修改类,以便像这样的情况下会看到 signed char 的行为,而不是我得到的 unsigned char 行为?

谢谢!

最佳答案

你想要的是从有符号字符到 S8 对象的隐式转换;这是通过非默认复制构造函数完成的。如果定义了采用带符号字符的复制构造函数,则编译器将使用它进行隐式转换(假设复制构造函数未定义为“显式”)。因此,对于您的示例:

class S8
{
private:
signed char val;
public:
//default constructor
S8() : val(0) {}

//default copy-constructor
S8(const S8& rhs) : val(rhs.val) {}

//allow implicit conversions (non-default copy constructor)
S8(const signed char rhs) : val(rhs) {}

//allow implicit conversions
operator signed char() { return val; }
};

int main()
{
S8 s;
signed char c;

s = -4;
c = -4;

std::cout << (int) s << std::endl;
std::cout << (int) c << std::endl;

return 0;
}

关于c++ - 为类对象指定 "return type",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17006325/

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