Войти

Показать полную графическую версию : Перегрузка операций и фунций


Natasha11
12-04-2012, 20:17
Помогите пожалуйста написать программу
задание:
Ввести класс для работы с объектом «множество целых чисел». Реализовать следующие операции:
а) разность двух множеств (операция –);
б) добавление элемента во множество (операция +).

El Scorpio
13-04-2012, 03:54
Пиши так

class TMyMany
{
// Закрытые поля и методы класса
public:
// Открытые свойства и методы класса

// А здесь объявляем методы переопределённых операторов
TMyMany operator+ (const TMyMany &Other);
TMyMany operator- (const TMyMany &Other);
TMyMany& operator= (const TMyMany &Other);
};

TMyMany TMyMany::operator+ (const TMyMany &Other)
{
TMyMany New;
/// Код сложения данных объекта this с данными объекта Other
return New;
};

TMyMany TMyMany::operator- (const TMyMany &Other)
{
TMyMany New;
/// Код вычитания из данных объекта this данных объекта Other
return New;
}


TMyMany& TMyMany::operator= (const TMyMany &Other)
{
/// Код копирования данных объекта Other в поля объекта this
return *this;
}


this - это указатель на искомый объект. Адрес этого объекта передаётся неявным параметром для каждого метода класса (за исключением "статических" методов)
Other - это константная ссылка на другой объект, из которого берутся дополнительные сведения

Оператор "=" позволяет переопределить операцию присваивания. В принципе это не обязательно, так как для большинства классов компилятор автоматически создаёт деструктор, конструктор по-умолчанию, конструктор копирования и оператор присваивания. Однако если поля объекта - это указатели на другие объекты, то эти методы придётся писать самому.
Обратите внимание, что оператор присваивания возвращает изменяемую ссылку на самого себя. Это нужно для того, чтобы правильно работал код вида
Obj1 = Obj2 = Obj3;


В принципе, операторы сложения/вычитания для объектов определённых классов можно прописать и как обычные внешние функции. Только в этом случае нельзя будет обращаться к закрытым полям первого объекта
TMyMany operator+ (const TMyMany &First, const TMyMany &Second);
TMyMany operator- (const TMyMany &First, const TMyMany &Second);




© OSzone.net 2001-2012