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

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

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

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

23.05.2014, 06:21. Просмотров 501. Ответов 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++
Здравствуйте!!! Я бы хотел попросить помоч решить...ну или скинуть примеры таких задач, если вдруг у вас они завалялись на компе или...

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

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

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

Заменить наследование классов на наследование интерфейсов - C++
#include &lt;iostream&gt; #include &lt;assert.h&gt; using namespace std; int people_on_base = 100; int vehicles_on_base = 100; double...

Наследование классов. Копирование производных классов - C++
Здравствуйте всем, у меня такой вопрос: написал код #include &quot;stdafx.h&quot; class A //Создаем класс А { int mA; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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
5309 / 4629 / 1550
Регистрация: 14.04.2014
Сообщений: 18,437
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
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
23.05.2014, 11:11 #4
nmcf, зачем создавать оператор присваивания, если предоставленная компилятором версия работает так же? Обычное почленное копирование же. Были бы указатели какие-нибудь - уже другой разговор.
nmcf
5309 / 4629 / 1550
Регистрация: 14.04.2014
Сообщений: 18,437
23.05.2014, 13:29 #5
Откуда я знаю зачем? Автор так захотел.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.05.2014, 13:29
Привет! Вот еще темы с ответами:

Сравнить два целых числа, не используя условного оператора, оператора выбора и так же символов сравнения - C++
Добрый день уважаемые программисты, хотелось, чтобы вы помогли мне в решении одной задачи, а именно подсказали идею решения. Задача...

Наследование оператора '=' - C++
Ситуация такая: пишу класс 3-мерного вектора, предварительно создав шаблон n-мерного вектора (ибо далее таким же макаром нужно соорудить и...

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
23.05.2014, 13:29
Ответ Создать тему
Опции темы

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