Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
tyna
2 / 2 / 0
Регистрация: 28.11.2013
Сообщений: 76
#1

Перегрузка оператора = и +=, используя наследование классов - C++

23.05.2014, 06:21. Просмотров 491. Ответов 4
Метки нет (Все метки)

Есть 2 класса (Point и Rect). В классе Rect нужно перегрузить операцию = и += не нарушая правил инкапсуляции. Я пробую через функции get_x, get_y. Но не уверен что правильно реализовал....
Класс Point:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#pragma once
#include <iostream>
using namespace std;
class Point {
private:
    int x, y;
public:
    Point();
    Point(int a, int b);
    Point(const Point &c);
    void move(int a, int b);
    Point assign(const Point &obj);
    void print();
    int get_x();
    int get_y();
    void put_x(int a);
    void put_y(int a);
    _declspec(property(get = get_x, put = put_x)) int X;
    _declspec(property(get = get_y, put = put_y)) int Y;
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include<iostream>
#include"Point.h"
using namespace std;
Point::Point() :x(), y(){}
Point::Point(int a, int b) : x(a), y(b){}
Point::Point(const Point&c) : x(c.x), y(c.y){}
void Point::move(int a, int b)
{
    x = a;
    y=b;
}
Point Point::assign(const Point&obj) {
    x = obj.x;
    y = obj.y;
    return *this;
}
void Point::print() {
    cout <<"x: "<<x <<", y: "<<y << endl;}
    
int Point::get_x()
    { return x; }
 
int Point::get_y()
    { return y; }
 
void Point::put_x(int a)
    { x = a; }
 
void Point::put_y(int a)
    { y = a; }
Класс Rect:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include "Point.h"
using namespace std;
 
class Rect : public Point{
    int dx, dy;
public :
    Rect();
    Rect(const Point&, int a, int b);
    Rect(const Rect&c);
    int square();
    Rect operator=(Rect&c);
    Rect operator+=(Rect&c);
    friend ostream& operator<<(ostream& s, Rect&c);
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include"rect.h"
Rect::Rect() :dx(0), dy(0) {}
Rect::Rect(const Point&obj, int a, int b) : Point(obj), dx(a), dy(b) {}
Rect::Rect(const Rect&a) : Point(a), dx(a.dx), dy(a.dy) {}
 
Rect Rect::operator = (Rect&a)
{
    Rect temp;
    temp.dx = a.dx;
    temp.dy = a.dy;
    return (temp);
}
 
Rect Rect::operator+=(Rect &a)
{
    Rect temp;
    temp.put_x(temp.get_x() + a.get_x());
    temp.put_y(temp.get_y() + a.get_y());
    return temp;
}
int Rect::square()
{
    return dx*dy;
}
Тут наследование идет...
Можете помочь, а то запутался...

Добавлено через 6 часов 53 минуты
Тут же в этих операциях temp не нужен, а ка без него можно сделать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2014, 06:21     Перегрузка оператора = и +=, используя наследование классов
Посмотрите здесь:

Перегрузка оператора ввода и наследование - C++
Добрый день! Обращаюсь по такому поводу. Есть одна программа, в которой требуется перегрузить операторы ввода.вывода для одного из...

Перегрузка оператора "<<" для вывода пользовательских классов - C++
Всем доброго времени суток. Пытаюсь сделать перегрузку оператора &quot;&lt;&lt;&quot; для того, чтобы можно было выводить объекты пользовательского класса...

Наследование классов. Используя базовый класс Point {x, y, цвет} разработать производные классы механизма двигателя. - C++
Движок (двигатель с кривошипно-шатунным механизмом) Ребята, кто может, помогите очень надо! получу автоматом или пойду на экзамен, вот...

Наследование оператора вывода - C++
////////////////////////////////////////////////////////////////////////// struct SomeStruct { }; ...

Перегрузка оператора = - C++
Нужно перегрузить оператор так что бы в начале строки и в конце были квадратные скобки . Все почти работает только вот вывод на экран не...

Перегрузка оператора < - C++
У меня 2 файла . Przedzial.h и Przedzial.cpp В первом только класс и названия метод и т.д. Во втором описание. Przedzial.h ...

Перегрузка оператора == и др - C++
C++ Builder ругаеться на перегрузку операторов. На mingw32-g++ все компилилось нормально. Пример пергрузки взял с хабра описание...

Перегрузка оператора [][] - C++
добрый день. имею в классе двумерный массив. подскажите как правильно сделать перегрузку к классу, чтоб при ЭкземлплярКлассa...

Перегрузка оператора += - C++
У меня имеется структура и метод, который вызывается след образом: A.plus_and_minus(B); Есть огромное желание перегрузить функцию += ,...

Перегрузка оператора - C++
При вызове оператора, и если F1.x &lt;= 0, то пишет текст 'N' должно быть &gt; 0, после чего выводит расчеты по формуле. Но мне этого не...

Перегрузка оператора + - C++
не получается в своем классе перегрузить оператор + :( пишет &quot;error C2804: бинарный &quot;operator +&quot; имеет слишком много параметров&quot;,...

Перегрузка оператора = - C++
Как перегрузить оператор = для char ?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
YouDoItWrong
46 / 46 / 7
Регистрация: 29.10.2011
Сообщений: 154
23.05.2014, 06:33     Перегрузка оператора = и +=, используя наследование классов #2
http://stackoverflow.com/questions/1...or-overloading
http://en.cppreference.com/w/cpp/language/move_operator
nmcf
5124 / 4444 / 1482
Регистрация: 14.04.2014
Сообщений: 17,649
23.05.2014, 08:15     Перегрузка оператора = и +=, используя наследование классов #3
Ты неправильно делаешь.
C++
1
2
3
4
5
6
7
8
9
10
11
12
Rect & operator = (const Rect &c);
 
...
 
Rect & Rect::operator = (const Rect &c)
{
    x = c.x;
    y = c.y;
    dx = c.dx;
    dy = c.dy;
    return *this;
}
Tulosba
:)
Эксперт С++
4392 / 3235 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
23.05.2014, 11:11     Перегрузка оператора = и +=, используя наследование классов #4
nmcf, зачем создавать оператор присваивания, если предоставленная компилятором версия работает так же? Обычное почленное копирование же. Были бы указатели какие-нибудь - уже другой разговор.
nmcf
5124 / 4444 / 1482
Регистрация: 14.04.2014
Сообщений: 17,649
23.05.2014, 13:29     Перегрузка оператора = и +=, используя наследование классов #5
Откуда я знаю зачем? Автор так захотел.
Yandex
Объявления
23.05.2014, 13:29     Перегрузка оператора = и +=, используя наследование классов
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru