0 / 0 / 2
Регистрация: 27.04.2015
Сообщений: 348
1

Перегрузка оператора присваивание

15.04.2017, 15:02. Показов 548. Ответов 7
Метки нет (Все метки)

Приветствую. Есть код:
.h
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;
 
template <class T>
class Set
{
 
  int g;
  T *mas;
 
public:
 
    Set(){}
 
    Set(int a)
    {
      g=a;
      mas=new int[a];
      for(int i=0;i<a;i++)
      {
        mas[i]=0;
      }
    }
 
    Set(Set&ob){}
    
 
    void set(int a)
    {
      cout<<"Введите массив:\n";
      for(int i=0;i<a;i++)
      {
        std::cin>>mas[i];
      }
    }
//----------------------------------------//
    Set operator* (Set& ob)
    {
      Set t(g);
      int k=0;
 
      for(int i=0;i<g;i++)
      {
          for(int j=0;j<g;j++)
          {
            if(mas[i]==ob.mas[j])
            {
              t.mas[k++]=mas[i];
              break;
            }
          }
      }
      if(k!=0){
          for(int i=0;i<k;i++)
              cout<<"\nсовпадениe  обнаружено:"<<t.mas[i]<<endl;
      }else cout<<"\nсовпадений не обнаружено..."<<endl; 
 
        return t;
    }
//----------------------------------------------------//
};
main
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main()
{
    setlocale(0,"");
 
    int q=0,t=0;
    cout<<"Введите размерность массива:";
    cin>>q;
 
        Set<e> obj(q);
    obj.set(q);
    Set<e> obj1(q);
    obj1.set(q);
 
    obj*obj1;
        system("pause");
    return 0;
}
Собственный тип:
C++
1
2
class e
{};
Вся проблема заключается в том что, если прописать в шаблон собственный тип данных код перестаёт работать, требуя перегрузить "=". Вот не знаю как это реализовать...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.04.2017, 15:02
Ответы с готовыми решениями:

Присваивание указателей, вызов оператора присваивания класса
Если написать StrL **testStr; testStr = new StrL * ; testStr = new StrLBit(&quot;100001&quot;); testStr...

Перегрузка фигурных скобок / множественное присваивание
Хотелось бы узнать, как работает перегрузка в векторах при определении его вот таким образом:...

Как в двусвязном списке сделать перегрузку оператора присваивание
Добрый день. Мне нужно перегрузить оператор =, так чтобы один объект класса &quot;Двусвязный список&quot;...

Перегрузка оператора +
Здравствуйте. Проблема в следующем: у меня есть класс. Список, реализующий работу с полиндромом:...

7
0 / 0 / 2
Регистрация: 27.04.2015
Сообщений: 348
17.04.2017, 21:04  [ТС] 2
Неужели никто не знает как сделать, чтобы работало и с собственным типом?
0
с++
1282 / 523 / 225
Регистрация: 15.07.2015
Сообщений: 2,562
17.04.2017, 21:51 3
C++
1
2
3
4
5
6
Set operator = (const Set& b){
  mas=new T[10];
  for(int i=0; i<10; i++){
    mas[i]=b.mas;
 }
}
ну так?

Добавлено через 9 минут
+еще нужно так сделать

C++
1
2
3
~Set(){
delete [] mas;
}
0
0 / 0 / 2
Регистрация: 27.04.2015
Сообщений: 348
17.04.2017, 22:01  [ТС] 4
...
Цитата Сообщение от Antikl Посмотреть сообщение
ну так?
Не совсем...
Цитата Сообщение от Tankist 90 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
Set(int a)
{
    g = a;
    mas = new int[a];
    for (int i = 0; i < a; i++)
    {
        mas[i] = 0; // здесь при компиляции выдаёт ошибку: бинарный "=" не найден оператор принимающий правый операнд типа "int"...
    }
}
0
Эксперт С++
8720 / 4300 / 958
Регистрация: 15.11.2014
Сообщений: 9,744
17.04.2017, 23:59 5
Цитата Сообщение от Tankist 90 Посмотреть сообщение
Вся проблема заключается в том что, если прописать в шаблон собственный тип данных код перестаёт работать, требуя перегрузить "=". Вот не знаю как это реализовать...
ну так дайте ему, что он просит:

C++
1
2
3
4
class e
{
    e& operator=(int){  return *this; }
};
1
0 / 0 / 2
Регистрация: 27.04.2015
Сообщений: 348
18.04.2017, 13:17  [ТС] 6
Вот отредактированный код, со всеми пожеланиями компилятора. Но при работе - вылетает...
.h
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
84
85
86
87
88
89
#include <iostream>
#include <cstring>
using namespace std;
 
template <class T>
class Set
{
 
  int g;
  T *mas;
 
public:
 
    Set(){}
 
    Set(int a)
    {
        g=a;
 
        mas=new T[g];
        for(int i=0;i<g;i++)
        {
           mas[i]=0;
        }
    }
 
    Set(Set&ob){}
    
 
    void set()
    {
      cout<<"Введите массив:\n";
      for(int i=0;i<g;i++)
      {
        cin>>mas[i];
      }
    }
//----------------------------------------//
    Set operator* (Set <T>& ob)
    {
      Set <T> t(g);
      int k=0;
 
      for(int i=0;i<g;i++)
      {
          for(int j=0;j<g;j++)
          {
            if(mas[i]==ob.mas[j])
            {
              t.mas[k++]=mas[i];
              break;
            }
          }
      }
      if(k!=0){
          for(int i=0;i<k;i++)
              cout<<"\nсовпадениe  обнаружено:"<<t.mas[i]<<endl;
      }else cout<<"\nсовпадений не обнаружено..."<<endl; 
 
        return t;
    }
//----------------------------------------------------//
 
friend istream& operator>>(istream &s, T ob )
{ 
    s>>ob;
    return s;
}
 
friend ostream& operator<<(ostream &s, T ob)
{
    s<<ob;
  return s;
}
 
};
 
class e
{
public:
   e& operator=(int)
   {  return *this; }
 
  const bool& operator==(e& ob)
   {
       if(*this==ob){return 1;}
       else return 0;
   }
};
0
0 / 0 / 2
Регистрация: 27.04.2015
Сообщений: 348
19.04.2017, 16:46  [ТС] 7
П.с. вылетает ещё при вводе размерности...
0
0 / 0 / 2
Регистрация: 27.04.2015
Сообщений: 348
23.04.2017, 17:02  [ТС] 8
И всё-таки, кто-то знает как добиться от этих перегрузок правильной работы?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.04.2017, 17:02
Помогаю со студенческими работами здесь

Перегрузка оператора -
В своём классе я перегрузил оператор -,но в функции,использующей вычитание возникает ошибка error...

Перегрузка оператора ->
Здравствуйте, мне нужно реализовать перегрузку operator-&gt; .Как реализован оператор -&gt;? Что он...

Перегрузка оператора []
При перегрузке оператора возникли проблемы, подскажыте как правильно перегрузить этот оператор,...

Перегрузка оператора =
Здравствуйте, возникла проблема при перегрузке оператора. const digit &amp;operator=( const int &amp; );...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru