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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вычисление обратной матрицы http://www.cyberforum.ru/cpp-beginners/thread1185404.html
есть у кого нибудь скрипт? поделитесь если не сложно
C++ Непонятные символы В общем, сделал функцию.Все работает, но есть одно но: если вводить строку, а введеный символ разделитель будет в ней отсутствовать, то в s1 скопируется введеная строка s с какими-то непонятными... http://www.cyberforum.ru/cpp-beginners/thread1185396.html
С++ проверить класс Date C++
Проблемы в задаче по классам (типа календаря) с системной датой date sysd и Today. #include "stdafx.h" #include <iostream> #include <dos.h> #include <conio.h> using namespace std; class...
Три простейших кода C++
Задания http://www.picshare.ru/view/4545821/
C++ Очередь и стек http://www.cyberforum.ru/cpp-beginners/thread1185381.html
Дан очередь и стек. Дан целочисленный массив. Надо четные элементы очереди перенести на четные места/индексы/позицию массива, а нечетные элементы стека на нечетные места/индексы/позицию того же...
C++ Вывести на экран числа кратные 2 и 3 в диапазоне от 2 до 222, и посчитать их количество Составьте программу, которая выводит на экран числа кратные 2 и 3 в диапазоне от 2 до 222, и посчитать их количество и вывести это число. подробнее

Показать сообщение отдельно
tyna
2 / 2 / 0
Регистрация: 28.11.2013
Сообщений: 76

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

23.05.2014, 06:21. Просмотров 504. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru