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

Ребят, уже запарился, гляньте, что не так!? конструктор копирования и оператор присваивания - C++

Восстановить пароль Регистрация
 
bayanist17
0 / 0 / 0
Регистрация: 01.11.2012
Сообщений: 10
19.09.2013, 11:18     Ребят, уже запарился, гляньте, что не так!? конструктор копирования и оператор присваивания #1
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#include <iostream>
using namespace std;
 
 
struct SNode {
      SNode*next;
      int val;
      SNode(){}
      SNode(SNode* ne,int a){val=a; next=ne;}
};
 
class SList
 {
  SNode* head;
  SNode* tail;
    public:
    SList();
    SList(int);
    SList(const SList&); //конструктор копирования
    ~SList();
 
    bool is_empty();
    void add_front(int);
    int remove_front();
    bool find(int);
    int get_nth(int);
    int size();
    void print_slist();
 
    //SList& operator=(const SList&); //опрератор присваивания
};
SList::SList(){
    this->head=new SNode();
    this->tail=head;
}
SList::SList(int a){
    tail=new SNode();
    head=new SNode(tail,a);
}
//+++++++++++++++++++++++++++++
   SList::SList(const SList& t) {
 
   SNode *temp=head;
   while (head!=tail){
   temp=head->next;
   head=temp;
   }
 
}
 //++++++++++++++++++++++++++++++
bool SList::is_empty(){
    return (head==tail)?true:false;
}
void SList::add_front(int a){
    SNode *q=head;
    head=new SNode(q,a);
}
int SList::remove_front(){
    SNode* q=head;
    head=head->next;
    int a=q->val;
    delete q;
    return a;
}
bool SList::find(int a){
    SNode* q=head;
    while(q!=tail)
    {
        if(q->val==a)
            return true;
        else
            q=q->next;
    }
    return false;
}
int SList::get_nth(int a){
    SNode* q=this->head;
    for(int i=0;i<a;i++)
        q=q->next;
    return q->val;
}
int SList::size(){
    SNode *q=head;
    int k=0;
    for(;q!=tail;q=q->next,k++)
        ;
    return k;
}
SList::~SList(){
    while(head!=tail)
    {
        SNode* p=head;
        head=head->next;
        delete p;
    }
    delete tail;
}
 
void SList::print_slist()
{
    int size=this->size();
    for(int i=0;i<size;i++)
    {
        std::cout<<this->get_nth(i)<<' ';
    }
    std::cout<<std::endl;
}/*
SList& SList::operator=(const SList& t)  {
    if(this!=&t){
    delete[];
    p
    }
}*/
 
 
int main()
{ SList L1;
L1.add_front(5);
L1.add_front(9);
L1.add_front(34);
SList L2;
L2.add_front(25);
L1=L2;
 
 
 
 /*
    SList list = new SList;
    for(int val=0;val<5;val++)
    {
        list.add_front(val);
 
    }
    if (!list.is_empty())
    {
        list.print_slist();
 
    }   */
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.09.2013, 11:18     Ребят, уже запарился, гляньте, что не так!? конструктор копирования и оператор присваивания
Посмотрите здесь:

C++ Конструктор присваивания или копирования
Конструктор копирования и оператор присваивания C++
C++ Про конструктор копирования, оператор присваивания
Конструктор копий. Оператор присваивания C++
Очередь, конструктор копирования и перегруженный оператор присваивания C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
19.09.2013, 11:43     Ребят, уже запарился, гляньте, что не так!? конструктор копирования и оператор присваивания #2
в конструкторе копирования надо же использовать объект, с которого копируешь Т_Т
bayanist17
0 / 0 / 0
Регистрация: 01.11.2012
Сообщений: 10
19.09.2013, 11:56  [ТС]     Ребят, уже запарился, гляньте, что не так!? конструктор копирования и оператор присваивания #3
вообще конструктор кривой! Извиняюсь
bayanist17
0 / 0 / 0
Регистрация: 01.11.2012
Сообщений: 10
29.09.2013, 11:46  [ТС]     Ребят, уже запарился, гляньте, что не так!? конструктор копирования и оператор присваивания #4
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
#include <iostream>
using namespace std;
 
 
struct SNode {
      SNode*next;
      int val;
      SNode(){ next = NULL; val = 0;};
      SNode(SNode* ne,int a){val=a; next=ne;}
     
};
 
 
class SList
 {
  SNode* head;
  SNode* tail;
    public:
    SList();
    SList(int);
    SList(const SList&); //конструктор копирования
    ~SList();
 
    bool is_empty();
    void add_front(int);
    int remove_front();
    bool find(int);
    int get_nth(int);
    int size();
    void print_slist();
 
  SList& operator=(const SList&); //оператор присваивания
};
SList::SList(){
    head=new SNode();
    tail=head;
}
SList::SList(int a){
    tail=new SNode();
    head=new SNode(tail,a);
}
//+++++++++++++++++++++++++++++
  SList::SList(const SList& t) {
  
while(t.head!=t.tail)
    {
                    //head=t.head;
                //head=head->next;
                head=new SNode(head,t.head->val);
        }
   tail = t.tail;
 
   }
 //++++++++++++++++++++++++++++++
bool SList::is_empty(){
    return (head==tail)?true:false;
}
void SList::add_front(int a){
    SNode *q=head;
    head=new SNode(q,a);
}
int SList::remove_front(){
    SNode* q=head;
    head=head->next;
    int a=q->val;
    delete q;
    return a;
}
bool SList::find(int a){
    SNode* q=head;
    while(q!=tail)
    {
        if(q->val==a)
            return true;
        else
            q=q->next;
    }
    return false;
}
int SList::get_nth(int a){
    SNode* q=this->head;
    for(int i=0;i<a;i++)
        q=q->next;
    return q->val;
}
int SList::size(){
    SNode *q=head;
    int k=0;
    for(;q!=tail;q=q->next,k++)
        ;
    return k;
}
void SList::print_slist()
{
    int size=this->size();
    for(int i=0;i<size;i++)
    {
        cout<<this->get_nth(i)<<' ';
    }
    cout<<endl;
}
SList::~SList(){
        while(head!=tail)
    {
        SNode* p=head;
        head=head->next;
        delete p;
    }
    delete tail;
}
//*************************************
SList& SList::operator=(const SList& t)  {
        // защита от неправильного самоприсваивания
    if (this == & t) return *this;
    else{
        // освобождаем старую память
    while(head!=tail)
    {
        SNode* p=head;
        head=head->next;
        delete p;
    }
    delete tail;
 
    // присваиваем значения в новой памяти объекту
while(t.head!=t.tail)
    {
                    head=t.head;
                //head=head->next;
                head=new SNode(head,t.head->val);
        }
   tail = t.tail;
  return *this; }
   }
//***************************************************
 
int _tmain(int argc, _TCHAR* argv[])
{
 
    SList L1;
L1.add_front(5);
L1.add_front(9);
L1.add_front(34);
    SList L2;
L2.add_front(25);
L1.print_slist();
L2.print_slist();
 
cout<<"posle = "<<endl;
    L1=L2; // вот тут проблемно
 
L1.print_slist();
L2.print_slist();
 
 
system("pause");
    return 0;
}
zer0mail
2189 / 1872 / 187
Регистрация: 03.07.2012
Сообщений: 6,668
Записей в блоге: 1
29.09.2013, 12:16     Ребят, уже запарился, гляньте, что не так!? конструктор копирования и оператор присваивания #5
Посмотри в отладчике.
Fyret
184 / 170 / 13
Регистрация: 30.07.2013
Сообщений: 359
29.09.2013, 13:16     Ребят, уже запарился, гляньте, что не так!? конструктор копирования и оператор присваивания #6
Ну например
C++
1
while(t.head!=t.tail)
Разве t.head меняется? Нет и не должен, ибо const SList& t.
В общем, неверная логика.
bayanist17
0 / 0 / 0
Регистрация: 01.11.2012
Сообщений: 10
29.09.2013, 14:00  [ТС]     Ребят, уже запарился, гляньте, что не так!? конструктор копирования и оператор присваивания #7
Как сделать? Помоги! Может так?

SList::SList(const SList& t) {
SNode *q=head;
while(q!=tail)
{
//head=t.head;
//head=head->next;
head=new SNode(q,t.head->val);
}
tail = t.tail;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.09.2013, 14:05     Ребят, уже запарился, гляньте, что не так!? конструктор копирования и оператор присваивания
Еще ссылки по теме:

C++ оператор = и конструктор копирования
Конструктор копирования и перегрузка оператора присваивания C++
Конструктор копирования, присваивания C++

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

Или воспользуйтесь поиском по форуму:
zer0mail
2189 / 1872 / 187
Регистрация: 03.07.2012
Сообщений: 6,668
Записей в блоге: 1
29.09.2013, 14:05     Ребят, уже запарился, гляньте, что не так!? конструктор копирования и оператор присваивания #8
Для гаданий есть кофейная гуща , а программист должен понимать, что и зачем он делает .
Yandex
Объявления
29.09.2013, 14:05     Ребят, уже запарился, гляньте, что не так!? конструктор копирования и оператор присваивания
Ответ Создать тему
Опции темы

Текущее время: 11:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru