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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.10.2010, 17:27   #1
mad_raven
Новичок
Джуниор
 
Регистрация: 10.10.2010
Сообщений: 5
По умолчанию Не могу понять.

Код:
class coord{
private:
	int x;
	int y;
	int z;
public:
	void pos(int x,int y,int z){this->x = x; this->y = y; this->z = z;};
	int _x(){return this->x;};
	int _y(){return this->y;};
	int _z(){return this->z;};
	coord operator +(coord sub){ this->pos(this->x + sub._x(),this->y + sub._y(),this->z + sub._z()); return *this; }
	coord operator -(coord sub){ this->pos(this->x - sub._x(),this->y - sub._y(),this->z - sub._z()); return *this; }
	coord operator *(coord sub){ this->pos(this->x * sub._x(),this->y * sub._y(),this->z * sub._z()); return *this; }
	coord operator /(coord sub){ this->pos(this->x / sub._x(),this->y / sub._y(),this->z / sub._z()); return *this; }
	coord operator =(coord sub){ this->pos(sub._x(),sub._y(),sub._z()); return *this; };

	bool operator !=(coord sub){
		if ((this->x != sub._x())||(this->y != sub._y())||(this->z != sub._z())){
			return true;
		}else{
			return false;
		}
	}
	bool operator ==(coord sub){
		if ((this->x == sub._x())&&(this->y == sub._y())&&(this->z == sub._z())){
			return true;
		} else {
			return false;
		}
	}
	coord swap(coord sub){
		this->pos(sub._x(),sub._y(),sub._z());
		return *this;
	}
};


int main(){
	coord a;
	coord b;
	coord c;
	a.pos(1,1,1);
	b.pos(5,5,5);
	c = a + b;
	}
a в итоге становится равным c, почему так, что я сделал неправильно?
mad_raven вне форума Ответить с цитированием
Старый 10.10.2010, 17:41   #2
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Код:
coord operator +(coord sub)
{
      sub.pos(this->x + sub._x(),this->y + sub._y(),this->z + sub._z());
      return sub;
}
Ваш код для operator +=
Но лучше так:
Код:
coord operator + (const coord &sub) const
{
      return coord(x+sub._x(), y+sub._y(), z+sub._z());
}
И конструктор накидать типа:
Код:
coord(int _x, int _y, int _z)
      : x(_x), y(_y), z(_z) {}
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."

Последний раз редактировалось Syuf; 10.10.2010 в 17:46.
Syuf вне форума Ответить с цитированием
Старый 10.10.2010, 17:50   #3
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Также не стоит точки с запятой везде впихивать:
Код:
int _x(){return this->x;}//;
	int _y(){return this->y;}//;
	int _z(){return this->z;}//;
И лучше так:
Код:
int _x() const {return this->x;}
	int _y() const {return this->y;}
	int _z() const {return this->z;}
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 10.10.2010, 17:53   #4
mad_raven
Новичок
Джуниор
 
Регистрация: 10.10.2010
Сообщений: 5
По умолчанию

пасиб, а что с operator = делать то? запутался вконец
mad_raven вне форума Ответить с цитированием
Старый 10.10.2010, 18:00   #5
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Вам тут он вообще не нужен - подойдет по умолчанию, но вообще так:
Код:
coord& operator = (const coord &sub)
{
      if(this == &sub)
            return *this;
      this->pos(sub._x(), sub._y(), sub._z());
      return *this;
}
И тогда уж:
Код:
void pos(int x,int y,int z) const {this->x = x; this->y = y; this->z = z;}
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."

Последний раз редактировалось Syuf; 10.10.2010 в 18:02.
Syuf вне форума Ответить с цитированием
Старый 10.10.2010, 18:32   #6
mad_raven
Новичок
Джуниор
 
Регистрация: 10.10.2010
Сообщений: 5
По умолчанию

Все равно a становится равой c =(
mad_raven вне форума Ответить с цитированием
Старый 10.10.2010, 18:37   #7
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

как вы изменили код?
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 10.10.2010, 18:45   #8
mad_raven
Новичок
Джуниор
 
Регистрация: 10.10.2010
Сообщений: 5
По умолчанию

Код:
class coord{
private:
	int x;
	int y;
	int z;
public:
	void const pos(int x,int y,int z) {this->x = x; this->y = y; this->z = z;}
	int _x() const {return this->x;}
	int _y() const {return this->y;}
	int _z() const {return this->z;}
	coord operator +(coord sub){ this->pos(this->x + sub._x(),this->y + sub._y(),this->z + sub._z()); return *this; }
	coord operator -(coord sub){ this->pos(this->x - sub._x(),this->y - sub._y(),this->z - sub._z()); return *this; }
	coord operator *(coord sub){ this->pos(this->x * sub._x(),this->y * sub._y(),this->z * sub._z()); return *this; }
	coord operator /(coord sub){ this->pos(this->x / sub._x(),this->y / sub._y(),this->z / sub._z()); return *this; }
	coord operator +=(coord sub){ this->pos(sub._x(),sub._y(),sub._z()); return *this; };
	coord& operator = (const coord &sub)
	{
      if(this == &sub)
            return *this;
      this->pos(sub._x(), sub._y(), sub._z());
      return *this;
	}


	bool operator !=(coord sub){
		if ((this->x != sub._x())||(this->y != sub._y())||(this->z != sub._z())){
			return true;
		}else{
			return false;
		}
	}
	bool operator ==(coord sub){
		if ((this->x == sub._x())&&(this->y == sub._y())&&(this->z == sub._z())){
			return true;
		} else {
			return false;
		}
	}
	coord swap(coord sub){
		this->pos(sub._x(),sub._y(),sub._z());
		return *this;
	}
};


int main(){
	coord a;
	coord b;
	coord c;
	a.pos(1,1,1);
	b.pos(5,5,5);
	c = a + b; 
}
все как сказали
mad_raven вне форума Ответить с цитированием
Старый 10.10.2010, 19:09   #9
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Во-первых не:
Цитата:
void const pos(...)
а:
Код:
void pos(...) const
А во-вторых вы собсно operator + не поменяли.
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 11.10.2010, 02:24   #10
mad_raven
Новичок
Джуниор
 
Регистрация: 10.10.2010
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Syuf Посмотреть сообщение
Во-первых не:

а:
Код:
void pos(...) const
Компилятор выдает следуещее:
main.cpp(37): error C3490: "x" не может быть изменен, поскольку доступ к нему осуществляется через константный объект

Цитата:
Сообщение от Syuf Посмотреть сообщение
А во-вторых вы собсно operator + не поменяли.
А что там нужно поменять?
mad_raven вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не могу понять _-Re@l-_ Помощь студентам 2 13.05.2010 15:04
Не могу понять spaun88 Общие вопросы Delphi 0 15.04.2010 00:41
не могу понять Dawystrik SQL, базы данных 0 06.09.2009 19:20
Не могу понять Superlotles Помощь студентам 8 31.08.2009 20:39
не могу понять... Dutchman Паскаль, Turbo Pascal, PascalABC.NET 4 14.12.2006 07:14