Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.05.2012, 20:11   #1
riko782
Пользователь
 
Регистрация: 17.03.2012
Сообщений: 40
Вопрос Перегрузка операторов

В общем задание следующее:
Создайте класс chess (шахматы), в котором хранятся поля шахматной доски x, y (целые числа, лежащие в диапазоне 1-8). Левое нижнее поле доски (1, 1) является черным. Перезагрузите по данному классу операторы == и != Соответствующие высказыванию: «Данные поля имеют одинаковые цвета».

мои наработки:
Код:
class Chess{
private:
	int x, y;
public:
	Chess(){}						//default constr
	Chess(int fieldX, int fieldY){	//const with parameters
		x = fieldX; y = fieldY;
	}

	//overloading operator ==
	bool operator == ( Chess& val){
		if ((this->x == val.x) && (this->y == val.y))
      {
        return true;
      }
      else
      {
        return false;
      }
	}

//overloading operator !=
	bool operator != ( Chess& val){
		if ((this->x == val.x) && (this->y == val.y))
      {
        return false;
      }
      else
      {
        return true;
      }
	}
}
Вопрос заключается в следующем: как сделать именно это сравнение "...соответствующее высказыванию: «Данные поля имеют одинаковые цвета»."?
riko782 вне форума Ответить с цитированием
Старый 06.05.2012, 20:47   #2
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Наверное по принципу четности:
Код:
((x1 + y1)%2 == (x2 + y2)%2)
EUGY вне форума Ответить с цитированием
Старый 06.05.2012, 21:11   #3
riko782
Пользователь
 
Регистрация: 17.03.2012
Сообщений: 40
По умолчанию

да, спасибо, доходил до такого, но возможно ли применить этот принцип для например сравнения объектов класса. Приблизительно выглядит так:
Код:
void main(){
Chess c1, c2;
if(c1%2 == c2%2){...}
}
как можно правильно это записать?
riko782 вне форума Ответить с цитированием
Старый 06.05.2012, 21:18   #4
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

У Вас же есть операторы сравнения. В них и сравнивайте координаты.
EUGY вне форума Ответить с цитированием
Старый 06.05.2012, 21:22   #5
riko782
Пользователь
 
Регистрация: 17.03.2012
Сообщений: 40
По умолчанию

т.е. в самой перегрузке оператора сравнить координаты?
riko782 вне форума Ответить с цитированием
Старый 06.05.2012, 21:34   #6
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Конечно.
Chess c1, c2;
if (c1==c2) //будет вызван оператор ==
{

}

а в этом операторе
return ((x + y)%2 == (val.x + val.y)%2);
EUGY вне форума Ответить с цитированием
Старый 06.05.2012, 22:15   #7
riko782
Пользователь
 
Регистрация: 17.03.2012
Сообщений: 40
По умолчанию

Поторопился с выводами...
НЕ выходит вывести правильный результат...
Написал следующее:
Код:
class Chess{
private:
	int x, y;
public:
	Chess(){}						//default constr
	Chess(int fieldX, int fieldY){	//const with parameters
		x = fieldX; y = fieldY;
	}

	bool operator == (Chess&val){
		if ((this->x == val.x) && (this->y == val.y))
      {
        return ((x + y)%2 == (val.x + val.y)%2);
      }
	}
//overloading operator !=
	bool operator != ( Chess& val){
		if ((this->x != val.x) && (this->y != val.y))
      {
        return ((x + y)%2 != (val.x + val.y)%2);
      }
	}
};


int main(){
	Chess c1(3,1), c2(3,3);
	if(c1 == c2){
		cout<<"The colour of this fields is equal"<<endl;	
	}
	else
	if(c1 != c2){
		cout<<"The colour of this fields isn't equal"<<endl;	
	}
return 0;
}

Последний раз редактировалось riko782; 06.05.2012 в 22:45.
riko782 вне форума Ответить с цитированием
Старый 06.05.2012, 22:45   #8
riko782
Пользователь
 
Регистрация: 17.03.2012
Сообщений: 40
По умолчанию

. .
riko782 вне форума Ответить с цитированием
Старый 06.05.2012, 23:14   #9
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Вот ну ни как было не догадаться
Код:
	bool operator == (Chess& val)
	{
		return ((x + y)%2 == (val.x + val.y)%2);
	}

	bool operator != ( Chess& val)
	{
		return (!((x + y)%2 == (val.x + val.y)%2));
	}
EUGY вне форума Ответить с цитированием
Старый 06.05.2012, 23:26   #10
riko782
Пользователь
 
Регистрация: 17.03.2012
Сообщений: 40
По умолчанию

Спасибо, вот теперь все работает
Не понял саму суть просто с перегрузкой оператора...
riko782 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перегрузка операторов C++ applegrub Общие вопросы C/C++ 4 20.12.2011 01:04
Перегрузка операторов stas135642 Общие вопросы C/C++ 0 13.11.2011 23:09
С++,перегрузка операторов colesik Помощь студентам 0 23.12.2010 23:07
Перегрузка операторов(С++) Сергей AfeR Помощь студентам 0 16.06.2010 18:34
Перегрузка операторов, Организация перегрузки операторов chagin_yav Помощь студентам 2 12.05.2008 09:15