С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/34: Рейтинг темы: голосов - 34, средняя оценка - 4.65
7 / 7 / 2
Регистрация: 25.12.2011
Сообщений: 111
1

Оператор присвоения для класса

04.01.2014, 15:51. Показов 6387. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Никак не получается написать оператор присвоения. Помогите пожалуйста!
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include <iostream>
#include <conio.h>
 
using namespace std;
 
class Vector
{
private:
    int count;
    float* mass;
    static int c_obj;
public:
    Vector() { count = 1; mass = new float; mass = 0; c_obj++;}
    
    Vector(int n)
    {
       c_obj++;
       count = n;
       mass = new float[count];
       for(int i=0;i<count;i++)
          mass[i] = i;
    }
    
    Vector(int n, float* init)
    {
       c_obj++;
       count = n;
       mass = new float[count];
       for(int i=0;i<count;i++)
          mass[i] = init[i];          
    }
    
    ~Vector(){ if(count == 1) delete mass; else delete[]mass; c_obj--;}
    
    void PrintVec();
    void GetCountOfObject() { cout<<"Count of object: "<<c_obj<<endl; }
    
public:
       Vector(const Vector &copy); 
       Vector operator=(const Vector &copy);
};
 
int Vector::c_obj = 0;
 
void Vector::PrintVec()
{
   if(count == 1) cout<<mass<<endl;
   else
      for(int i=0;i<count;i++)
         cout<<mass[i]<<" ";
      cout<<endl;    
}
 
Vector::Vector(const Vector& copy)
{
   if(this->count == copy.count) 
       for(int i=0;i<count;i++)
          mass[i] = copy.mass[i];
   if(this->count > copy.count)
   {
      for(int i=0;i<count;i++)
      {
         if(copy.count<i) mass[i] = copy.mass[i];
         else mass[i] = 0;           
      }    
   }
   if(this->count < copy.count)
   {
      Vector v(this->count);
      for(int i=0;i<this->count;i++)
         v.mass[i] =  this->mass[i];
      delete [] this->mass;
      this->mass = new float[copy.count];
      for(int i=0;i<copy.count;i++)
      {
         if(this->count<i) this->mass[i] = v.mass[i];
         else this->mass[i] = 0;           
      }    
      this->count = copy.count;
   }
}
 
Vector Vector:: operator=(const Vector &copy)
{
    
    
                     
}
 
int main()
{
    float mass[5];
    for(int i=0;i<5;i++)
       mass[i] = rand()%10;
       
    Vector v(5,mass),t(5);
    v.PrintVec();
    t.PrintVec();
    t = v;
    t.PrintVec();
    
    getch();
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.01.2014, 15:51
Ответы с готовыми решениями:

Оператор присвоения копии для класса, действующего как значения
Приветсвую. Увидел в книге Липпмана, &quot;Язык программирования С++. Базовый курс&quot;, определение...

Конструктор перемещения и оператор присвоения для двусвязного списка
Добрый день. Помогите разобраться в вопросом: пишу реализацию двусвязного списка, хотел бы...

Для шаблонного класса перегрузить оператор присваивания, copy-конструктор, объекты cin и cout, оператор *
Помогите в следующем: Для класса шаблона следует перегрузить оператор присваивания, конструктор...

С++ оператор присвоения
Всем доброго времени суток. Я написал класс в котором имеется приватный указатель или вернее 2...

12
38 / 38 / 22
Регистрация: 16.04.2013
Сообщений: 327
Записей в блоге: 1
04.01.2014, 15:59 2
лень читать код. вот пример. если не разберешься. напиши ошибки какие летят у тебя
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class test
{
public:
    test(int number):num(number){};
    
    void operator =(test &b)
    {
        this->num=b.num;
    }
 
    int num;
};
int main()
{
    test abc(5);
    test xyz(10);
    abc=xyz;
    cout <<abc.num;
    system("pause");
}
0
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
04.01.2014, 16:01 3
vozup, rand с библиотеки <cstdlib>

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
Vector::Vector(const Vector& copy)
{
   this->operator=(copy);
}
 
Vector &Vector::operator=(const Vector &copy)
{
    if(this->count == copy.count)
       for(int i=0;i<count;i++)
          mass[i] = copy.mass[i];
   if(this->count > copy.count)
   {
      for(int i=0;i<count;i++)
      {
         if(copy.count<i) mass[i] = copy.mass[i];
         else mass[i] = 0;
      }
   }
   if(this->count < copy.count)
   {
      Vector v(this->count);
      for(int i=0;i<this->count;i++)
         v.mass[i] =  this->mass[i];
      delete [] this->mass;
      this->mass = new float[copy.count];
      for(int i=0;i<copy.count;i++)
      {
         if(this->count<i) this->mass[i] = v.mass[i];
         else this->mass[i] = 0;
      }
      this->count = copy.count;
   }
 
   return *this;
}
1
7 / 7 / 2
Регистрация: 25.12.2011
Сообщений: 111
04.01.2014, 16:10  [ТС] 4
Спасибо, присвоение работает если количество є-ов одинаковое, а если разное не работает.
0
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
04.01.2014, 16:21 5
Цитата Сообщение от vozup Посмотреть сообщение
одинаковое, а если разное не работает.
http://lmgtfy.com/?q=c%2B%2B+%20realloc
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
04.01.2014, 16:22 6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Vector::Vector(const Vector& copy)
{
    count = copy.count;
    mass = new float[count];
    for(int i = 0; i < count; i++)
        mass[i] = copy.mass[i];
}
 
Vector Vector::operator=(const Vector &copy)
{
    if (this == &copy) return *this;
    delete [] mass;
    count = copy.count;
    mass = new float[count];
    for(int i = 0; i < count; i++)
        mass[i] = copy.mass[i];
    
    return *this;             
}
0
7 / 7 / 2
Регистрация: 25.12.2011
Сообщений: 111
04.01.2014, 16:29  [ТС] 7
Спасибо всем, дальше разобрался сам.
Вот код какой у меня получился, если интересно.
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include <iostream>
#include <conio.h>
#include <cstdlib>
 
using namespace std;
 
class Vector
{
private:
    int count;
    float* mass;
    static int c_obj;
public:
    Vector() { count = 1; mass = new float; mass = 0; c_obj++;}
    
    Vector(int n)
    {
       c_obj++;
       count = n;
       mass = new float[count];
       for(int i=0;i<count;i++)
          mass[i] = i;
    }
    
    Vector(int n, float* init)
    {
       c_obj++;
       count = n;
       mass = new float[count];
       for(int i=0;i<count;i++)
          mass[i] = init[i];          
    }
    
    ~Vector(){ if(count == 1) delete mass; else delete[]mass; c_obj--;}
    
    void PrintVec();
    void GetCountOfObject() { cout<<"Count of object: "<<c_obj<<endl; }
    
public:
       Vector(const Vector &copy); 
       Vector& operator=(const Vector &copy);
};
 
int Vector::c_obj = 0;
 
void Vector::PrintVec()
{
   if(count == 1) cout<<mass<<endl;
   else
      for(int i=0;i<count;i++)
         cout<<mass[i]<<" ";
      cout<<endl;    
}
 
Vector::Vector(const Vector& copy)
{
   this->operator=(copy);
}
 
Vector &Vector::operator=(const Vector &copy)
{
    if (this == &copy) return *this;
    if(this->count == copy.count)
       for(int i=0;i<count;i++)
          mass[i] = copy.mass[i];
          
   if(this->count > copy.count)
   {
      for(int i=0;i<count;i++)
      {
         if(copy.count>i) mass[i] = copy.mass[i];
      }
   }
   
   if(this->count < copy.count)
   {
      delete [] this->mass;
      this->count = copy.count;
      this->mass = new float[copy.count];
      
      for(int i=0;i<copy.count;i++)
      {
         if(this->count>i) this->mass[i] = copy.mass[i];
         else this->mass[i] = 0;
      }
   }
 
   return *this;
}
 
int main()
{
    float mass[7];
    for(int i=0;i<7;i++)
       mass[i] = rand()%10;
       
    Vector v(7,mass),t(10);
    v.PrintVec();
    t.PrintVec();
    t = v;
    t.PrintVec();
    
    getch();
    return 0;
}
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
04.01.2014, 16:44 8
Цитата Сообщение от vozup Посмотреть сообщение
если интересно.
Не интересно.
Так не делают:
C++
1
2
3
4
Vector::Vector(const Vector& copy)
{
   this->operator=(copy);
}
Присваивание и копирование - разные вещи. Нельзя копирование заменять присваиванием. Копия - это копия: создаётся новое, в которое копируется старое. Присваивание подразумевает удаление старого значения, и присвоение нового.
Напишите вот так (чтобы сработал конструктор копирования) и будет ошибка:
C++
1
2
Vector v(7,mass),t(10);
Vector v2(v);
1
7 / 7 / 2
Регистрация: 25.12.2011
Сообщений: 111
04.01.2014, 16:54  [ТС] 9
Цитата Сообщение от alsav22 Посмотреть сообщение
Так не делают
Спасибо за критику, учту в дальнейшем!
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
04.01.2014, 16:59 10
Цитата Сообщение от vozup Посмотреть сообщение
учту в дальнейшем!
В дальнейшем - это хорошо, но код кривой.
0
7 / 7 / 2
Регистрация: 25.12.2011
Сообщений: 111
04.01.2014, 17:02  [ТС] 11
Цитата Сообщение от alsav22 Посмотреть сообщение
В дальнейшем - это хорошо, но код кривой.
Я же не профессиональный программист, я только учусь.
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
04.01.2014, 17:31 12
Цитата Сообщение от vozup Посмотреть сообщение
Я же не профессиональный программист, я только учусь.
Я не об этом, а о том, что код нужно исправить. Код нерабочий.
0
7 / 7 / 2
Регистрация: 25.12.2011
Сообщений: 111
04.01.2014, 17:40  [ТС] 13
Да код я исправлю это точно.
0
04.01.2014, 17:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.01.2014, 17:40
Помогаю со студенческими работами здесь

Шаблоны и оператор присвоения
что я не правильно делаю? у меня входит в бесконечную рекурсию на операторе присвоения template...

Реализовать оператор= для присваивания объекта класса-потомка объекту базового класса
Есть два класса A и B, причем класс B является потомком A. Как реализовать следующее: obj_A = obj_B...

Оператор присвоения в бинарном дереве
Не смог разобраться. Прокомментируйте, будьте добры. Задание такое, определите стандартный...

Создать конструктор копий и оператор присваивания для класса компьютер и члена класса марка
Создать конструктор копий и оператор присваивания для класса компьютер и члена класса марка. ...

Создать класс Str (символьная строка). Переопределить оператор присвоения.
Помогите решить с обяснениями. Создать класс Str (символьная строка). Переопределить оператор...

Перегрузить для класса оператор ==
немогу написать продолжение кода... нужно написать : перегрузить для данного класса оператор...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru