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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
EgorNsk
0 / 0 / 0
Регистрация: 30.06.2013
Сообщений: 2
#1

Перегрузка методов класса - C++

30.06.2013, 17:03. Просмотров 1544. Ответов 5
Метки нет (Все метки)

Проблема заключается в следующем я не получается правильно сделать задание.
Задание:"Для класса реализовать набор операций для работы с объектами класса: сложение, инкремент постфиксный и префиксный, преобразование к разным типам. Операции сложения, инкремента, преобразования реализовать как методы класса. Изменить демонстрационную пpогpамму, продемострировав все перегруженные операции."
Класс я написал с различными методами, а с перегрузкой всё не могу справиться.
Это класс
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
#include<stdio.h>
#include<conio.h>
#include<iostream>
#include<math.h>
using namespace std; 
 
class forma
    {
        int shir,dl,shirina;
        int dlina;
        char *color;    
    public:
        forma(forma &a);
        forma();
        forma(int shir2,int dl2,char *color2);
        forma(int shirr, int dlinn);
        ~forma();
        int S ();
        int P ();
        int Dlin();
        int Shirn();
        void Show_Clor();
        void operator +(int);
        void operator ++();
        void operator -(float );
    
};
Это методы
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include "333.h"
 
forma::forma(forma &a)
{
    color=new char[strlen(a.color)+1];
    strcpy(color,a.color);
    cout<<"construct copy"<<endl;
}
 
 forma::forma()
{   color=NULL;
    cout<<"construct po umol4aniy"<<endl;
}
forma::forma(int shir2, int dl2, char *color2)
{           
    shir = shir2;   
    dl = dl2;   
    color=new char[strlen (color2)+1];
    strcpy(color,color2);
    cout<<"construct"<<endl;
    
}
 
int forma::S()
{
    int x=shir*dl;
    return x;   
}
int forma::P()
{
    int y=2*(dl+shir);
    return y;
}
void forma::Show_Clor()
{
    cout<<"Длина= "<<dl<<endl;
    cout<<"Ширина= "<<shir<<endl;
    cout<<"Цвет= "<<color<<endl;
    
}
forma::~forma()
{
    if (color!=NULL)
    delete color;
    cout<<"destruct"<<endl;
}
forma::forma(int shirr, int dlinn)
{
    shirina=shirr;
    dlina=dlinn;
}
void forma::operator +(int forma)
{
    shir+shirina;
}
Это main
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
#include "333.h"
 
int main()
{
setlocale( LC_CTYPE,"Rus" );
    int sh, sh2;
    int dll;
    float dll2;
    char clr[10];   
    cout << "Введите длину: ";
    cin >>dll;
    cout << "Введите ширину: ";
    cin >>sh;
    cout << "Введите цвет: ";
    cin >> clr;
    cout<<"Введите ширину 2 прямоугольника: ";
    cin>>sh2;
    cout<<"Введите длину 2 прямоугольника: ";
    cin>>dll2;
    forma two(sh2,dll2);
    forma small;
    forma big(sh,dll,clr);
    forma copy(big);
    cout<<"S="<<big.S()<<endl;
    cout<<"P="<<big.P()<<endl;
    big.Show_Clor();
        
}
Заранее спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.06.2013, 17:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка методов класса (C++):

Перегрузка методов класса Прямоугольник - C++
1.Продемонстрировать перегрузку функций-членов класса &quot;Прямоугольник&quot;, функция член – &quot;Нарисовать&quot;. Различать случаи собственно...

Напишите реализацию методов, предоставляющих доступ к данным класса. Отобразите в программе работу этих методов - C++
Реализация методов класса. Напишите реализацию методов, предоставляющих доступ к данным класса. Отобразите в программе...

Перегрузка методов - C++
Помогите написать программу. Создать массив объектов, и с помощью методов класса предусмотреть следующие возможности: • вывод...

Как вынести описание методов вложенного класса за пределы класса? - C++
Подскажите, пожалуйста, как мне вынести описание методов вложенного класса за пределы класса?

Вызов методов класса из двойного указателя на экземпляр класса - C++
Добрый день! Как можно вызвать метод класса по двойному указателя на его экземпляр? struct Point { void getPoint(){}; ...

Наследование и перегрузка методов - C++
Здравствуйте. Пытаюсь выполнить упр. 8 из главы 11 книги Р.Лафоре &quot;ООП в С++&quot;, соорудил такое древо классов (картинка в конце поста). Если...

5
Khelleos
37 / 37 / 7
Регистрация: 13.05.2010
Сообщений: 283
Записей в блоге: 1
30.06.2013, 18:23 #2
Пример для матрицы
Вот так следует объявлять бинарные операции.
C++
1
friend matrix operator+(const matrix &left, const matrix &right);
Унарные так
C++
1
matrix& operator+=(const matrix &right);
Тело метода в matrix.cpp
C++
1
2
3
4
5
6
7
8
9
10
matrix& matrix::operator+=(const matrix &right)
{
   if (this->check_add(right))
   {
      for(int i = 0; i < row * col; i++)
         data[i] += right.data[i];
      return *this;
   }
   throw "Невозможно вычислить сумму 2-х матриц.\n";
}
Тебе осталось сделать аналогично
1
coloc
погромист
410 / 246 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
30.06.2013, 18:27 #3
Цитата Сообщение от Khelleos Посмотреть сообщение
+=
Когда это += стала унарной операцией???
0
Khelleos
37 / 37 / 7
Регистрация: 13.05.2010
Сообщений: 283
Записей в блоге: 1
30.06.2013, 18:32 #4
Пфуты...не о том подумал.
Так лучше писать, когда не нужно получать новую матрицу(то есть новый объект)
0
EgorNsk
0 / 0 / 0
Регистрация: 30.06.2013
Сообщений: 2
30.06.2013, 19:20  [ТС] #5
А как прописать тогда если нужно получить новый объект?
0
Khelleos
37 / 37 / 7
Регистрация: 13.05.2010
Сообщений: 283
Записей в блоге: 1
30.06.2013, 19:36 #6
Тут в самом методе у тебя будет создан (ты сам создашь) новый объект и его ты будешь возвращать.
C++
1
friend matrix operator+(const matrix &left, const matrix &right);
А тут ты сможешь обращаться к объекту, которые перед знаком равно, напрямую, не передавая его.
Поэтому результат ты будешь записывать сразу туда.
C++
1
matrix& operator+=(const matrix &right);
Только не забудь перегрузить присваивание

Добавлено через 1 минуту
C++
1
2
3
4
5
6
matrix operator+(const matrix &left, const matrix &right)
{
    matrix temp(left);
    temp += right;
    return temp;
}
0
30.06.2013, 19:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.06.2013, 19:36
Привет! Вот еще темы с ответами:

Перегрузка методов и преобразование типов. - C++
Такой вопрос. Есть класс. class MarkMSGProtocol_t : public MarkIO_t { public: MarkMSGProtocol_t(); virtual...

Перегрузка оператора >> для дочернего класса от базового виртуального класса - C++
Доброго вам времени суток! Программирую на С++ не давно, в связи с отсутствием должного времени на поиск ответа в глубинах учебников,...

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

Составить описание класса "3D вектор". Объявить объекты класса и продемонстрировать работу методов - C++
Возникли сложности при решении задачи. Буду признателен тем, кто поможет. Задание: Составить описание класса. Объявить объекты класса...


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

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

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