У меня есть следующий класс, который должен представлять 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);
Я получаю "Результаты: 252, -4" от Printf. Есть ли способ изменить класс таким образом, чтобы такие случаи видели поведение подписанного символа, а не поведение без знака, которое я получаю?
Спасибо!
Неопределенное поведение: хорошая причина не использовать 'printf'. – chris
И ваш перегруженный оператор присваивания действительно странный. Ваша проверка адреса никогда не будет правдой (см. «Копирование-обмен»), и вам даже не нужно ее перегружать. Просто создайте конструктор преобразования из 'signed char'. Ваш оператор преобразования мог бы просто «вернуть val». – chris
Печать была просто проверкой, чтобы я не потерял знак. Я решил, что увижу отрицательное число, а не дополнение к нему. Приятно было знать, что это был только я, не зная, как использовать printf, спасибо! Я рассмотрю оператор присваивания ... это была копия/вставка из другого вопроса SO, и я не задумывался о нем – SVC