Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
1 / 1 / 0
Регистрация: 31.08.2015
Сообщений: 46
1

Конструкторы

24.07.2010, 20:34. Показов 839. Ответов 2
Метки нет (Все метки)

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 "stdafx.h"
#include <iostream>
using namespace std;
#include <string>
#include <cstdlib>
#include <list>
#include<stdlib.h>
 
struct Node
{   
    int value;
    Node* prev;
    Node* next;
    
};
 
class List {
public:
Node * first; //первый элемент списка
void Napolnen (); //наполнение списка
void Udalenie (int d); //удаление элемента перед заданным
void Perebor(); //перебор списка
~List(); //деструктор
};
 
 
 
 
void List::Napolnen () 
{
Node* p = new Node;
first=p;
p->value=rand()%100;
       p->prev=0;
       p->next=0;
       cout<<p->value<<" ";
   for( int i = 0; i < 20; i++ ) 
   {          
       Node* r=new Node;    
 
       r->value= rand()%100;          
       cout << r->value << " ";     
        p->next=r;              
        r->prev=p;              
        r->next=0;              
        p=r;                    
   }
cout<<endl;
};
 
 
 
void List::Udalenie(int d) 
{
Node*p=first;
while(p)
{
    if(p->value==d)
      {
        if (p->prev==NULL)
        cout<<"Nechego udaljat"<<endl;  
        else
        p->prev->prev->next = p->prev->next;
      }
 p=p->next;
}
};
 
 
void List::Perebor() 
{
    cout<<"Poluchennyi spisok:"<<endl;
    Node*p=first;
while (p)
{
cout<< p->value<< " ";
p=p->next;
}
cout<<endl;
};
 
 
List::~List()
{
    while(first)
     {
        Node* p=first;
        first=p->next;
        delete (p);
     }
}
 
 
void main(void)  
{
int r;
List l1;
l1.Napolnen();
cout<<"Vvedite element: ";
cin>>r;
l1.Udalenie(r);
l1.Perebor();
l1.~List();
system ("Pause"); 
} ;
Нужно сделать конструктор копирования, конструктор по умолчанию, оператор присваивания...
Пытался, но как-то запутался... тем более что до конца не понимаю что они должны делать.
Ну и вообще если есть какие-то замечания по коду, всему рад
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.07.2010, 20:34
Ответы с готовыми решениями:

конструкторы
Здравствуйте! Давеча по учебе пришлось мне столкнуться с конструкторами. В качестве примера мне...

Написать класс Треугольник... (Конструкторы С++)
Здравствуйте, помогите с решением нужно Написать класс треугольник имеющий 3 конструктора (...

Конструкторы, не могу прокоментировать текст проги
class stack { private: enum { Empty=-1}; char *s int max_len, top; public: stack(); ...

В проекте VS2012 компилятор игнорирует конструкторы классов
Компилятор отлично компилирует проект и не выдаёт ошибок, но при генерации DEBUG версии и надо...

2
Рожденная для битвы
281 / 58 / 12
Регистрация: 08.11.2009
Сообщений: 1,101
24.07.2010, 21:38 2
Скачай книгу Вильямс - Visual C++ 2005. Базовый курс.2007
Там что-то похожее описывается.
Попробуй по этой ссылке, правда я не знаю как она - давно скачивала.
 Комментарий модератора 
Подобные ссылки запрещены, перечитайте правила форума, обратите внимание на п. 3.10
1
Эксперт С++
1666 / 1038 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
25.07.2010, 11:20 3
Конструктор копирования предназначен для создания копии объекта (очевидно, из уже существующего). Его сигнатура будет выглядеть так:
List::List(const List& src);
Поскольку у тебя контейнер, в таком конструкторе тебе нужно будет скопировать содержимое, то есть, воспроизвести в создаваемом объекте такой же список, как у src и наполнить его такими же данными. Объект src (тот, который копируем) и его список при этом изменять нельзя.

Конструктор по умолчанию не имеет параметров и предназначен для создания объектов без указания тех параметров (например, в объявлениях
List l1; List l2[10]; - в первом случае параметры не указаны, во втором вообще массив, там параметры указать невозможно). Сигнатура конструктора по умолчанию, очевидно, такая:
List::List()
В твоём случае, вероятно, достаточно создать пустой список.

Оператор присваивания предназначен для занесения содержимого одного объекта в другой, уже существующий. Сигнатура такая:
List& List::operator = (const List& src);
Очевидно, что в нём тебе надо уничтожить собственный список и затем скопировать список из src (точнее, реконструировать, как в конструкторе копирования). Опять же, изменять src и его список при этом нельзя.
Для того, чтобы поддерживать синтаксис "цепочечных" присваиваний (вроде a = b = c = d;), обычно рекомендуется (хотя в принципе это и необязательно) возвращать из оператора присваивания ссылку на объект, в который записано значение (то есть, return *this;). Для этого-то его тип возвращаемого значения и указан как List&. Хотя, если тебе такие цепочки не нужны, можно придать оператору тип void.

Операцию копирования списка, задействованную в конструкторе копирования и операторе присваивания, имеет смысл вынести в отдельную служебную функцию в секции private, чтобы не дублировать код. Та же рекомендация относится к очистке списка, которая будет вызываться и в операторе присваивания, и в деструкторе.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.07.2010, 11:20

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Конструкторы и поля
Зравствуйте, что-то не могу сообразить какие параметры или какие методы, поля использовать с этой...

[дизайн и эволюция] провалы в variadic конструкторы
всем привет. уже несколько человек обращались ко мне по почте, с просьбой помочь разобраться с...

Конструкторы,передача сообщений объектам и реакции объектов на сообщения в С++
Привет всем! Тему чуть-чуть понимаю,но задачу сделать не могу, вы не могли бы мне помочь с этим?...

Webpack собирает проект, а приложение говорит что мои конструкторы не конструкторы
Помогите пожалуйста, в едином файле (не билде) всё работает хорошо, как только начинаю отделять...


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

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

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