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

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

Восстановить пароль Регистрация
 
tyna
2 / 2 / 0
Регистрация: 28.11.2013
Сообщений: 65
23.05.2014, 06:21     Перегрузка оператора = и +=, используя наследование классов #1
Есть 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 не нужен, а ка без него можно сделать?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
4306 / 3727 / 1256
Регистрация: 14.04.2014
Сообщений: 14,599
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
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
23.05.2014, 11:11     Перегрузка оператора = и +=, используя наследование классов #4
nmcf, зачем создавать оператор присваивания, если предоставленная компилятором версия работает так же? Обычное почленное копирование же. Были бы указатели какие-нибудь - уже другой разговор.
nmcf
4306 / 3727 / 1256
Регистрация: 14.04.2014
Сообщений: 14,599
23.05.2014, 13:29     Перегрузка оператора = и +=, используя наследование классов #5
Откуда я знаю зачем? Автор так захотел.
Yandex
Объявления
23.05.2014, 13:29     Перегрузка оператора = и +=, используя наследование классов
Ответ Создать тему
Опции темы

Текущее время: 07:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru