Перегрузка оператора постфиксного инкремента
У меня есть класс
class Match
{
private:
char* team1 = new char[25];
char* team2 = new char[25];
char* month = new char[25];
int number;
public:
Match();
Match(const char*, const char*, int, const char*);
Match(Match&);
~Match();
Match& operator= (Match&);
Match& operator++ ();
Match operator++ (int);
};
А это реализация методов класса:
Match::Match():number(25)
{
strcpy(team1, "Barcelona");
strcpy(team2, "Real Madrid");
strcpy(month, "May");
}
Match::Match(const char* team1, const char* team2, int number, const char* month)
{
strcpy(this->team1, team1);
strcpy(this->team2, team2);
strcpy(this->month, month);
this->number = number;
}
Match::Match(Match& other)
{
strcpy(this->team1, other.team1);
strcpy(this->team2, other.team2);
strcpy(this->month, other.month);
this->number = other.number;
}
Match::~Match()
{
delete[] team1;
delete[] team2;
delete[] month;
}
Match& Match::operator= (Match& match)
{
strcpy(this->team1, match.team1);
strcpy(this->team2, match.team2);
strcpy(this->month, match.month);
this->number = match.number;
return *this;
}
Match Match::operator++ (int value)
{
Match temp = *this;
++(*this);
return temp;
}
Реализацию префиксного инкремента пропустил, так как много строк (из-за проверок).
Я не могу понять, как мне реализовать данную строчку в main:
Match match1, match2;
match1 = match2++;
Компилятор выдает ошибку, что отсутствует соответствующий оператор. Но я как только не испробовал менять перегрузку этого оператора, ничего не помогло, постоянно какие-то ошибки.
Ответы (1 шт):
Вам надо правильно написать не оператор ++, а оператор присваивания:
Match& Match::operator= (const Match& match)
Понятно, почему const? Потому что возвращаемое вашим оператором ++ значение не является lvalue.
Ну, и надо дописать префиксный оператор ++, а то не слинкуется.
P.S. У вас же С++, зачем вам такие небезопасные и морочливые вещи, как С-строки? используйте string.