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

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

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

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

30.06.2013, 17:03. Просмотров 1475. Ответов 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();
        
}
Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.06.2013, 17:03     Перегрузка методов класса
Посмотрите здесь:

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

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

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

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

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

Шаблоны методов класса - C++
Здравствуйте, подскажите, можно ли в С++ сделать шаблон отдельного метода класса ? т.е. нужно что-то типа подобного: class MyClass ...

Вызов методов класса - C++
Здравствуйте! При компиляции программы(в среде CodeBloks) выдается такая ошибка: request for member 'Arrayss:: array_proc' in 'j', which...

Вызов методов класса - C++
// practice.cpp : main project file. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;iomanip&gt; using namespace std; const int...

Определение методов класса - C++
Доброго времени суток, Такой вопрос возник: В заголовочном файле (head.h) я объявил класс using namespace std; class integer ...

Ошибка методов класса - C++
#include &quot;Header.h&quot; #include &lt;iostream&gt; int main() { using ms::List; List&lt;int&gt; mylist; // 1 int val = 7.1; ...

Определение методов вне класса - C++
Определение методов вне класса используется только для того, чтобы не вносить беспорядок или есть еще какая- то причина?

Определение методов шаблонного класса - C++
Столкнулся с такой проблемой, реализовываю итератор для шаблонного списка, при определении метода интератора вылетает ошибка вот лог : ...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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";
}
Тебе осталось сделать аналогично
coloc
погромист
409 / 245 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
30.06.2013, 18:27     Перегрузка методов класса #3
Цитата Сообщение от Khelleos Посмотреть сообщение
+=
Когда это += стала унарной операцией???
Khelleos
37 / 37 / 7
Регистрация: 13.05.2010
Сообщений: 283
Записей в блоге: 1
30.06.2013, 18:32     Перегрузка методов класса #4
Пфуты...не о том подумал.
Так лучше писать, когда не нужно получать новую матрицу(то есть новый объект)
EgorNsk
0 / 0 / 0
Регистрация: 30.06.2013
Сообщений: 2
30.06.2013, 19:20  [ТС]     Перегрузка методов класса #5
А как прописать тогда если нужно получить новый объект?
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;
}
Yandex
Объявления
30.06.2013, 19:36     Перегрузка методов класса
Ответ Создать тему
Опции темы

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