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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.10.2010, 03:33   #11
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,336
По умолчанию

непонимание плюсов налицо. не хочу разводить демагогию, скажу просто. для бинарных арифметических операторов необходимо использовать глобальную (можно friend) функцию, а не как ты сделал, через метод. оператор присвоения правльно, нужно использовать метод. почему ты получил то, что получил объяснять влом. если немного подумаешь, как в с++ вычисляются выражения, то сам поймешь в чем твоя ошибка.

все таки решил написать тебе правильный ++ код

Код:
#include <iostream>

using namespace std;

//-----------------------------------------------------------------------------------------
class coord {
public:
	coord()
		: x(0), y(0), z(0)
	{}

	coord(int _x, int _y, int _z)
		: x(_z), y(_y), z(_z)
	{}

	coord &operator=(const coord &sub)
	{
		x = sub.x;
		y = sub.y;
		z = sub.z;
		return *this;
	}

	friend const coord operator+(const coord &v, const coord &sub);
	friend ostream &operator<<(ostream &s, const coord &v);

private:
	int x;
	int y;
	int z;
};

//-----------------------------------------------------------------------------------------
const coord operator+(const coord &v, const coord &sub)
{
	coord ret;
	ret.x = v.x + sub.x;
	ret.y = v.y + sub.y;
	ret.z = v.z + sub.z;
	return ret;
}

//-----------------------------------------------------------------------------------------
ostream &operator<<(ostream &s, const coord &v)
{
	s << v.x << "|" << v.y << "|" << v.z << endl;
	return s;
}

//-----------------------------------------------------------------------------------------
int main()
{
	coord a(1, 1, 1);
	coord b(5, 5, 5);
	coord c;

	c = a + b;

	cout << a << endl;
	cout << b << endl;
	cout << c << endl;

	a = b;

	cout << a << endl;
	cout << b << endl;
	cout << c << endl;
}
перегрузил только 3 оператора. читай страуструпа, николаса солтера. в последнем как раз есть хорошая таблица по перегрузке, что как перегружать.
пс. форматирование кода у тебя ппц. еле распарсил
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance

Последний раз редактировалось pproger; 11.10.2010 в 03:58.
pproger вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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