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

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

Войти
Регистрация
Восстановить пароль
 
vladislava131
0 / 0 / 0
Регистрация: 18.04.2012
Сообщений: 4
#1

Не работает конструктор копирования почему-то... - C++

19.04.2012, 20:20. Просмотров 411. Ответов 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
#include "stdlib.h"
#include "stdio.h"
#include <iostream>
#include <cstddef> 
using namespace std;
 
class Top
{
public:
    Top (){};
    Top (int v, Top *n){d = v, next = n;};
int d;
Top* next;
};
 
class Stack
{
Top* p;
public:
    Stack (){Top *p = NULL; }// {p = first(1);};
    Stack (int d);
    bool IsEmpty() {if (p != NULL) return false; else true; };
    Stack ( Stack& mp)  
    {
        Stack B; Top *p = mp.p; while(p != NULL)
        { mp.push(p -> d); p = p -> next;} 
        while (!mp.IsEmpty()) {push(mp.pop());} 
    };
void push2(int d){p = new Top (d, p);};
int pop ();
void push (int d);
int top ();
Top *first(int d)
{
    Top *s = new Top;
    s -> d = d;
    s -> next = NULL;
    return s;
}
Top *find( int d)
{
    Top *s = p;
    while ( s != 0)
    {
        if ( s -> d == d) break;
        s = s -> next;
    }
    return s;
};
void ra (int key, int d);
void ra2 (int key1, int d);
void pechat();
};
 
Stack :: Stack (int d)
{
  push(d);
}
 
int Stack :: pop ()
{
    int value = 0;
    value = p -> d; 
    Top *s = p;
    p = p -> next;
    delete (s);
    return value;
}
 
void Stack :: push (int d)
{
    Top *s=  new Top;
    s -> d = d;
    s -> next = p;
    p = s;
}
 
int Stack :: top ()
{
    return p -> d;
}
 
void Stack :: ra (int key, int d)
{
    Top *stack1 = find(key);
    Top *ptr = p;
    Top *ptr1 = p;
    for ( int i = 0; i < d -1; i ++) ptr = ptr -> next;
    while ( ptr1 -> next != stack1) 
    {
        ptr1 = ptr1 -> next;
    }
    ptr1 -> next = ptr1 -> next -> next;
    stack1 -> next = ptr -> next;
    ptr -> next = stack1;
}
 
void Stack :: ra2 (int key1, int d)
{
    Top * stack1 = find (key1);
    Top *ptr = p;
    Top *ptr1 = p;
    for (int i = 0; i < d - 1; i ++)
    {
        ptr = ptr -> next;
    }
    while(ptr1 -> next != stack1){ptr1 = ptr1 -> next;}
    ptr1 ->next = ptr1 -> next -> next;
}
 
void Stack :: pechat ()
{
    while (p != NULL)
    {
        printf ("%d", pop());
    }
}
 
int main ()
{
    int n, i;
    Stack m;
    Stack();
    for ( i = 2; i < 6; i ++)
    {
        m.push(i);
    }
    n = m.top();
    Stack d (m);
    printf("%d\n", n);
    m.pechat();
    d.pechat();
    //m.ra(2,1);
    //m.pechat();
    //m.ra2(2,4);
    //m.pechat();
    printf("\n");
    return 0;
}
Не работает конструктор копирования почему-то...Всё остальное хорошо)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.04.2012, 20:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не работает конструктор копирования почему-то... (C++):

Неправильно работает конструктор копирования list, почему? - C++
#include &lt;windows.h&gt; #include &lt;stdio.h&gt; #include &lt;list&gt; #include &lt;iterator&gt; #include &lt;iostream&gt; using namespace std; list...

Почему не вызывается конструктор копирования? - C++
...У меня в книге описаны случаи при которых вызывается конструктор копирования. Один из этих случаев: : &quot;Когда аргумент имеет тип...

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

Почему не срабатывает конструктор копирования в пользовательском классе - C++
вроде со всем разобралась, но не заходит в конструктор копирования. В чём ошибка? #include &lt;iostream&gt; #include &quot;welcome.h&quot; ...

Не работает конструктор копирования - C++
Всем доброго времени суток. Помогите пожалуйста, уже битиый день не могу побороть почему не работает конструктор копирования :cry: ...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Heretiqu3
10 / 10 / 2
Регистрация: 19.04.2012
Сообщений: 20
19.04.2012, 21:26 #2
Цитата Сообщение от vladislava131 Посмотреть сообщение
Всё остальное хорошо)
Я бы поспорил
; нужна только в объявлении(прототипе) функции(метода), в определении - нет.
Конструктор по умолчанию класса Top пустой, поэтому там будет содержаться указатель указывающий неизвестно куда.
Так же данные, по правилам ООП, должны быть защищены, в том же классе Top. Подружите классы или сделайте Top вложенным
так как пишите в строку методы, не суждено, что будут такие ошибки:
C++
1
2
3
4
5
6
7
8
9
bool IsEmpty()
{
   if (p != NULL)
   { 
      return false; 
   }
   else
     [B] true;[/B]
   };
конструктор копирования должен принимать константный объект (а зачем там создаете обьект B? )
Так же вы принимаете объект, С КОТОРОГО копировать данные, а не которому.
нет оператора присваивания



ну и по мелочи Top *p = NULL; лучше nullptr
данным класса присваивайте имена начинающиеся с префикса, например m_, чтобы не запутаться

C++
1
2
3
4
5
6
7
8
9
10
11
Stack(const Stack & mp) //const
{
   p = new Top;
   Top * pr = mp.p;
   while(pr != NULL)
   {
      push(pr->d);
      pr = pr->next;
   } 
   //while (!mp.IsEmpty()) {push(mp.pop());}  зачем разрушать копируемый стэк?
}
конструктор Top
C++
1
Top() { d = 0; next = nullptr; }
Успехов!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.04.2012, 21:26
Привет! Вот еще темы с ответами:

Конструктор копирования не работает - C++
Прошу вас помочь разобраться с конструктором копирования. Проблема в следующем при вызове конструктора копирование вылетает ошибка не...

Не работает конструктор копирования - C++
#include &lt;iostream.h&gt; #include &lt;conio.h&gt; #include &lt;stdio.h&gt; class my {int x1,x2,y1,y2,col; public: my(int _x1=20, int _y1=5,...

Почему не вызывается конструктор копирования при возврате объекта из функции - C++
Добрый день! Насколько мне известно, конструктор копирования вызывается: 1) при передачи объекта как аргумента функции ...

Как работает конструктор копирования? - C++
ECM::ECM(const ECM &amp;E) //êîíñòðóêòîð êîïèðîâàíèÿ { if (E.type) {type= new char ; strcpy(type, E.type);} else type=0; ...


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

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

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