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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.60
Opiym
8 / 8 / 0
Регистрация: 02.11.2009
Сообщений: 89
#1

Перегрузка функций - C++

14.03.2010, 17:37. Просмотров 1932. Ответов 21
Метки нет (Все метки)

Здравствуйте ! Попробовал выполнить задание, но есть проблемы...Кто может проверит а ошибки...
Задание:
АДТ - одномерный массив (вектор) вещественных чисел. Дополнительно перегрузить след. операции:
"+" - сложение векторов (a[i]+b[i] для всех i);
"[]" - доступ по индексу;
"+" - добавить число к вектору (double+vector)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Задание вроде как выполнил, но проблема в том, что не знаю как проверить работоспособность, нужен небольшой тест.
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include <iostream> 
using namespace std; 
 
class matrix {   // класс
private: 
  float m[3]; // одномерный массив
 
public: 
  matrix();                  
  matrix(float initial);      
  matrix(const matrix& mat); 
  ~matrix() {}                 
 
  // перегрузка операций  
    // доступ по индексу  
  float   operator [] (const int index_x); 
    // вычитание числа  
  matrix  operator + (const float value); 
    // вычитание матрицы 
  matrix  operator + (const matrix& mat);    
}; 
 
matrix::matrix() { 
  // создаем матрицу 
  for(int i=0; i<3; i++) 
         m[i]=0.f;  
  m[0]=m[1]=m[2]=1.f; 
} 
 
matrix::matrix(float initial) { 
  for(int i=0; i<3; i++) 
         m[i]=0.f; 
  m[0]=m[1]=m[2]=initial; 
} 
 
matrix::matrix(const matrix& mat) { 
  // копируем матрицу 
  for(int i=0; i<3; i++) 
         m[i]=mat.m[i]; 
} 
 //доступ по индексу
float matrix::operator [](const int index_x) { 
  return m[index_x]; 
}  
 
matrix matrix::operator + (const matrix& mat) { 
  matrix tmp; 
  for(int i=0; i<3; i++) 
       tmp.m[i]=m[i]+mat.m[i]; 
  return tmp; 
} 
 
matrix matrix::operator + (const float value) { 
  matrix tmp; 
  for(int i=0; i<3; i++) 
        tmp.m[i]=m[i]+value; 
  return tmp; 
} 
 
// вспомогательная функция для вывода матрицы   
void printMatrix(matrix& mat) { 
 cout << mat[0] << " " << mat[1] << " " << mat[2] << endl; 
  //cout << "------------------------" << endl; 
} 
 
int main() { 
[B]  // небольшой тест написанного [/B] 
  
  return 0; 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.03.2010, 17:37     Перегрузка функций
Посмотрите здесь:

Перегрузка функций - C++
Прошу помогите, очень нужно, до 24.02, если не сдам, то отчислят!(((( Программка на перегрузку функций... Определить максимальное из чисел,...

Перегрузка функций - C++
Попались на глаза две функции.Сразу напишу их в коде double RND() { return (random(RAND_MAX)/(double)RAND_MAX); }; ...

Перегрузка функций - C++
Здравствуйте!!! я не однократно просил помочь на этом форуме...именно с перегрузкой стека!!! Потому что все мои попытки самостоятельно...

Перегрузка функций - C++
Стало интересно из-за возможна перегрузка функций в программе на языке С++, с чем это связано, как реализовано внутри программы? Кто...

Перегрузка функций - C++
Помогите написать программу: Перегрузка функций. Написать перегруженные функции и основную программу, которая их вызывает. а) для...

Перегрузка функций - C++
Добрый вечер) очень нужна помощь нужно решить задачу, все решила, кроме одного пункта. создать класс окружность (okr) ....

Перегрузка функций - C++
Определить две функции с одним именем для решения задачи. Определить функцию, которая находит минимальное значение из двух чисел (числа...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
romych2004
22 / 21 / 3
Регистрация: 29.03.2009
Сообщений: 67
14.03.2010, 21:11     Перегрузка функций #16
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
56
57
58
59
60
#include <iostream>
using namespace std;
 
class vect{
private:
 int size;//размер вектора
 int *data; //массив
public:
 explicit vect(int i)
 {
     data=new int[i];
 }
 ~vect()
 {
     delete [] data;
 }
 vect& operator + (int vector &V)//ссылку возвращаем!!
 {
    if (size!=V.size) return *this; //вообщето, если вектора не совпадают по размеру это ошибка, и должно заканчиваться печально.
    for (int i=0;i <size;i++)
    {
        data[i]+=V.data[i];
    } 
    return *this;
 }
  int &operator[](int index) //тута надо ссылку возвращать! а не сам элемент!!!!
  {
     return data[index];
  } 
  vect& operator + (int num)
{
     for (int i=0;i<size;i++)
     {
         data[i]+=num;
      }
     return *this;
}
int show()
{
for(int i = 0; i< size; i++)
cout<<data[i]<<' ';
cout<<'\n';
return 0;
}
};
int main()
{
vect v1(2);
v1[0] = 4;
v1[1] = 3;
vect v2(2);
v2 = 1;
v2 = 2;
v1 = v1 + v2;
 
v1.show();
 
getch();
return 0;
}
что-то вроде этого)
Opiym
8 / 8 / 0
Регистрация: 02.11.2009
Сообщений: 89
14.03.2010, 21:33  [ТС]     Перегрузка функций #17
Немного подправил...что - то типа того, но ....

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
56
57
58
59
60
61
#include <iostream>
using namespace std;
 
class vect{
private:
 int size;//размер вектора
 int *data; //массив
public:
 explicit vect(int i)
 {
     data=new int[i];
 }
 ~vect()
 {
     delete [] data;
 }
 vect& operator + (vect &V)//ссылку возвращаем!!
 {
    if (size!=V.size) return *this; //вообщето, если вектора не совпадают по размеру это ошибка, и должно заканчиваться печально.
    for (int i=0;i <size;i++)
    {
        data[i]+=V.data[i];
    } 
    return *this;
 }
  int &operator[](int index) //тута надо ссылку возвращать! а не сам элемент!!!!
  {
     return data[index];
  } 
  vect& operator + (int num)
{
     for (int i=0;i<size;i++)
     {
         data[i]+=num;
      }
     return *this;
}
int show()
{
for(int i = 0; i< size; i++)
cout<<data[i]<<' ';
cout<<'\n';
return 0;
}
};
 
int main()
{
vect v1(2);
v1[0] = 4;
v1[1] = 3;
vect v2(2);
v2 = 1;
v2 = 2;
v1 = v1 + v2;
 
v1.show();
 
getch();
return 0;
}
Ошибка 1 error C2679: бинарный '=': не найден оператор, принимающий правый операнд типа 'int' (или приемлемое преобразование отсутствует) 53

Ошибка 2 error C2679: бинарный '=': не найден оператор, принимающий правый операнд типа 'int' (или приемлемое преобразование отсутствует) 54

Ошибка 3 error C3861: getch: идентификатор не найден 59


А так большое СПАСИБО !
romych2004
22 / 21 / 3
Регистрация: 29.03.2009
Сообщений: 67
14.03.2010, 21:42     Перегрузка функций #18
ой, сорь
v2 = 1;
v2 = 2;

тут надо индексы поставить) [0] и [1] как у v1
и подключи библиотеку для getch()
Opiym
8 / 8 / 0
Регистрация: 02.11.2009
Сообщений: 89
14.03.2010, 21:58  [ТС]     Перегрузка функций #19
Всё исправил ! Всё запускается ! Всё СУПЕР ! НО ! )) Тест работы программы не пашет, наверно, тупо консольное чёрное окно и всё, нажимаю клавишу и на этом всё, выход
Библиотека conio.h ? Так ?
romych2004
22 / 21 / 3
Регистрация: 29.03.2009
Сообщений: 67
14.03.2010, 22:05     Перегрузка функций #20
замени это
C++
1
2
3
4
 explicit vect(int i)
 {
     data=new int[i];
 }
на это

C++
1
2
3
4
5
 explicit vect(int i)
 {
     size = i;
     data=new int[size];
 }

upd: да, конио)
Opiym
8 / 8 / 0
Регистрация: 02.11.2009
Сообщений: 89
14.03.2010, 23:45  [ТС]     Перегрузка функций #21
СПАСИБО БОЛЬШОЕ ! Всё Супер ! тебе +1000

Добавлено через 1 час 23 минуты
+1000 и Aye Aye
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.03.2010, 14:16     Перегрузка функций
Еще ссылки по теме:

перегрузка функций - C++
Помогите: как изменится поле private, когда мы делаем перегрузку функции? Функция заполняет массив в зависимости от того, какого типа...

Перегрузка функций в C++ - C++
Создать класс Integer для работы с целыми числами. Определить перегруженную функцию, возвращающую sin аргумента. Функция не является членом...

Перегрузка функций - C++
Задание: Написать перегруженные функции и основную программу, которая их вызывает. а) для массива целых чисел находит количество...

Перегрузка функций - C++
Здравствуйте уважаемые програмисты:) У меня вот такое задание: В классе необходимо перегрузить нижеследующие операции, при этом две...

перегрузка функций. - C++
создать перегруженную функцию, которая меняет местами цифру под номером л в числе а с цифрой под номером к в числе б. я так сделала, ...


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

Или воспользуйтесь поиском по форуму:
Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
17.03.2010, 14:16     Перегрузка функций #22
хватит уже страдать!
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <iostream>
#include <conio.h>
using namespace std;
 
class vect{
private:
        int sz;//размер вектора
        int *data; //массив
public:
       explicit vect(int i)
       {
                data=new int[i];
                sz=i;
       }
       ~vect()
       {
              delete [] data;
       }
       vect &operator+(vect &V)//ссылку возвращаем!!
       {
             if (sz!=V.sz) return *this; //вообщето, если вектора не совпадают по размеру это ошибка, и должно заканчиваться печально.
             for (int i=0;i <sz;i++)
             {
                 data[i]+=V.data[i];
             } 
             return *this;
       }
       int &operator[](int index) //тута надо ссылку возвращать! а не сам элемент!!!!
       {
           return data[index];
       } 
       vect& operator + (int num)
       {
             for (int i=0;i<sz;i++)
             {
                 data[i]+=num;
             }
             return *this;
       }
       int size()
       {
           return sz;
       }
};
int main()
{
    srand(time(0)); //настройка генератора случайных чисел
    
    vect v1(10);//первый вектор из 10-и элементов
    vect v2(10);//второй вектор из 10-и элементов
    
    //заполняем первый вектор случайными числами
    for (int i=0;i<v1.size();i++)
    {
        v1[i]=rand()%10;
    }
    //заполняем второй вектор случайными числами
    for (int i=0;i<v2.size();i++)
    {
        v2[i]=rand()%10;
    }
    
    //распечатываем первый вектор
    cout << "v1=[";
    // вот эта конструкция:   ((i+1<v1.size())?(','):(']'))  нужна чтобы запятая не выводилась после последнего числа в векторе
    for (int i=0;i<v1.size();i++) cout << v1[i] <<((i+1<v1.size())?(','):(']'));
    cout << endl;
    //распечатываем второй вектор
    cout << "v2=[";
    for (int i=0;i<v2.size();i++) cout << v2[i] <<((i+1<v2.size())?(','):(']'));
    cout << endl;
    //поэлементно прибавляем в первому вектору второй
    v1=v1+v2;
    //теперь надо показать что получилось
    cout << "v1=v1+v2\n";
    cout << "new v1=[";
    for (int i=0;i<v1.size();i++) cout << v1[i] <<((i+1<v1.size())?(','):(']'));
    cout << endl;
    //ну дальше разберешься я надеюсь ))))
    //надо еше остальные операторы продемонстрировать в работе
    getch(); //задержка экрана (на саммов деле ожидание на ввод сивола)
    return 0;
}
ой sorry!!! не посмотрел тему дальше 1 стр. Х))) думал еще не решен вопрос
Yandex
Объявления
17.03.2010, 14:16     Перегрузка функций
Ответ Создать тему
Опции темы

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