Другие языки программирования и технологии

C++. Перегрузка

1. В классе Point перегрузить одноместные операции: “++” и “--” . Продемонстрировать в главной программе использование этих операций. Результаты вывести. Операция “++” описывается внутри класса, а операция “--” описывается вне класса.

2. В классе Point перегрузить двуместные операции: “+” и “-” . Продемонстрировать в главной программе использование этих операций. Результаты вывести. Операция “-” описывается внутри класса, а операция “+” описывается вне класса.
#include <iostream>
using namespace std;
class point {
public:
    point() : x(0) { }
    point(int _x) : x(_x) { }
    int get_point();
    void set_point(int);
    void show_point();
    void operator++();
    void operator--();
    void operator++(int);
    void operator--(int);
    point const operator+(point const &)const;
    point const operator+(int)const;
    point const operator-(point const &)const;
    point const operator-(int)const;
private:
    friend point const operator+(int, point const &);
    friend point const operator-(int, point const &);
    int x;
};
int main() {
    point pt;
    pt.set_point(5);
    pt.show_point(); // 5
    pt++;
    pt.show_point(); // 6
    pt--;
    pt.show_point(); // 5
    ++pt;
    pt.show_point(); // 6
    --pt;
    pt.show_point(); // 5
    const point pt2(7);
    pt = pt + pt2;
    pt.show_point(); // 12
    pt = pt - 25;
    pt.show_point(); // -13
    point pt3 = -12 + pt2;
    pt3.show_point(); // -5
    cin.get();
    return 0;
}
int point::get_point() { return x; }
void point::set_point(int _x) { x = _x; }
void point::show_point() { cout << " x = " << x << endl; }
void point::operator++() { x++; }
void point::operator--() { x--; }
void point::operator++(int) { x++; }
void point::operator--(int) { x--; }
point const point::operator+(point const & _point)const { return point(x + _point.x); }
point const point::operator+(int _scalar)const { return point(x + _scalar); }
point const operator+(int _scalar, point const & _point) { return point(_scalar + _point.x); }
point const point::operator-(point const & _point)const { return point(x - _point.x); }
point const point::operator-(int _scalar)const { return point(x - _scalar); }
point const operator-(int _scalar, point const & _point) { return point(_scalar - _point.x); }
Владимир Кучер
Владимир Кучер
54 227
Лучший ответ
Алибек Токбаев Лучше point pt3 = -12 - pt2;
pt3.show_point(); // -19
Цена вопроса?
Саша Бало
Саша Бало
90 823
Откуда такое задание.. . Я походу ничего не понял, но попробую рассказать поверхностно: ++ и -- -это инкремент и декремент, т. е. увеличение и уменьшение на единицу, а что такое + и - наверно объяснять не стоит.. . То, что описывается в классе, будет в нем локально исполнятся, что вне - глобально.
Возможно я пояснил не то, что нужно или не так?
Sergey Sergey
Sergey Sergey
13 783
По-моему довольно банальные задания, примеров по интернетам море.

По поводу перегрузки "вне класса" гуглите в сторону friend-функций.

И читать книги, много читать книг хороших и разных! Иначе все это пустая трата времени и нервов. Тогда тратьте лучше деньги =)
Игорь Трофимчук Каких friend-функций? Если вне класса то к кому должен быть оператор другом?
Нужно всеголишь взять два параметра, вместо одного.

А когда внутри класса идет объявление то у нас есть this.