Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
2 / 2 / 0
Регистрация: 28.11.2013
Сообщений: 79
1

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

23.05.2014, 06:21. Показов 896. Ответов 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 не нужен, а ка без него можно сделать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.05.2014, 06:21
Ответы с готовыми решениями:

Множественное наследование, Перегрузка функций, Перегрузка операторов, Использование дружественных функций и классов, Использование шаблонов классов
Здравствуйте!!! Я бы хотел попросить помоч решить...ну или скинуть примеры таких задач, если вдруг...

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

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

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

4
48 / 48 / 24
Регистрация: 29.10.2011
Сообщений: 154
23.05.2014, 06:33 2
http://stackoverflow.com/quest... verloading
http://en.cppreference.com/w/c... e_operator
0
6968 / 6013 / 2731
Регистрация: 14.04.2014
Сообщений: 25,730
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;
}
0
:)
Эксперт С++
4766 / 3260 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
23.05.2014, 11:11 4
nmcf, зачем создавать оператор присваивания, если предоставленная компилятором версия работает так же? Обычное почленное копирование же. Были бы указатели какие-нибудь - уже другой разговор.
0
6968 / 6013 / 2731
Регистрация: 14.04.2014
Сообщений: 25,730
23.05.2014, 13:29 5
Откуда я знаю зачем? Автор так захотел.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.05.2014, 13:29

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Автоматическая генерация классов С ++ с UML диаграмм классов. Наследование в с++. Абстрактные классы. WhiteStarUML
Создать классовую модель(желательно в WhiteStarUML), которая включает в себя абстрактный класс...

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

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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