Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 13.05.2015
Сообщений: 3
1

Добавить в программу конструктор копирования

26.05.2015, 17:06. Показов 546. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задача состоит в следующем : нужно добавить в программу конструктор копирования. Искал на многих сайтах нахожу разные ответы на интересующий меня вопрос, насколько я понял структура самого конструктора следующая : Имя класса ( const Имя класса & obj). В условии задания сказано что конструктор может не влиять на ход выполнения программы, как сделать так, чтобы с помощью КК в новую переменную firstbook вносились данные об авторе первой книги?
C++ (Qt)
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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
#include <iostream>
#include <fstream>
#include <windows.h>
#include <cstdio>
using namespace std;
class book
{
private:
    int year;
    char* author;
public:
    book() {
        author = new char[50];
    }
 
    ~book() {
        delete[] author;
    }
    void SetYear(int a){                    //задаем год
        year = a;
    }
    void SetAuthor(char* author1){          //задаем автора
        strcpy(author,author1)
    }
    int GetYear(){                          //возвращаем год
        return(year);
    }
    char* GetAuthor(){                      //возвращаем автора
        return(author);
    }
    void ShowData()
    {
        char* avtor1 = new char[50];
        OemToAnsi(author, avtor1);
        cout << "Год издания - " << year << endl
            << "Автор - " << avtor1 << endl;
    }
};
class library
{
private:
    int kol;
    book f[10];
    public:
    library(int a) {
        kol = a;
        int i;
        // int firstbook;
        for (i = 0; i<kol; i++){
            int b;
            cout << "Введите год издания" << endl;
            cin >> b;
            f[i].SetYear(b);
            char* Author = new char[50];
            cout << "Введите автора" << endl;
            getchar();
            cin.getline(Author, 256);
            f[i].SetAuthor(Author);
        }
    }
    //library(const library & obj)
    //{ 
    //  firstbook=obj.avtor1 
    //}   
    void addBook(){                             //добавление книги
        int b;
        cout << "Введите год издания" << endl;
        cin >> b;
        f[kol].SetYear(b);
        char* Author = new char[50];
        cout << "Введите автора" << endl;
        getchar();
        cin.getline(Author, 256);
        f[kol].SetAuthor(Author);
        delete[] Author;
        kol++;
    };
    void deleteBook(int a){                     //удаление книги
        int i;
        for (i = a; i<kol; i++){
            int k;
            k = f[i + 1].GetYear();
            f[i].SetYear(k);                    //книги сдвигаются на одну позицию влево 
            char* avtor;
            avtor = f[i + 1].GetAuthor();
            f[i].SetAuthor(avtor);
        }
        f[kol].SetYear(0);
        kol--;                                  //лишняя позиция убирается
    };
    void SortBookYear(){                        //сортировко книг по возрастанию
        bool a = 1;
        while (a) {
            a = 0;
            int i;
            int j;
            for (i = 0; i<kol - 1; i++){
                for (j = 0; j<kol - i - 1; j++)
                    if (f[i].GetYear()>f[i + 1].GetYear()) {
                        int k = f[i].GetYear();
                        f[i].SetYear(f[i + 1].GetYear());
                        f[i + 1].SetYear(k);
 
                        char* ksim = f[i].GetAuthor();
                        f[i].SetAuthor(f[i + 1].GetAuthor());
                        f[i + 1].SetAuthor(ksim);
                        a = 1;
                    }
 
 
            }
 
        }
    };
    void ShowAllBooks(){
        int i = 0;
        for (i = 0; i<kol; i++){
            cout << "Номер книги - " << i + 1 << endl;
            f[i].ShowData();
        }
    };
 
};
int main()
{
 
    setlocale(LC_ALL, "Russian");
    cout << "Введите количество книг" << endl;
    int a;
    cin >> a;
    library home(a);
 
    while (a){
        cout << "Выберите дальнейшие действия: " << endl
            << "1 - Добавить книгу" << endl
            << "2 - Удалить книгу" << endl
            << "3 - Отсортировать книги по году" << endl
            << "4 - Показать все книги" << endl
            << "5 - Выход из программы" << endl;
        int h;
        cin >> h;
        switch (h)
        {
        case 1: {
            home.addBook();
            break;
        }
        case 2: {
            cout << "Введите номер книги:" << endl;
            int j;
            cin >> j;
            home.deleteBook(j - 1);
            break;
        }
        case 3: {
            home.SortBookYear();
            break;
        }
        case 4: {
            home.ShowAllBooks();
            break;
        }
        case 5: {
            a = 0;
            break;
        }
        default: {
            cout << "Вы ввели неправильный вариант. Попробуйте еще раз." << endl;
        }
 
 
        }
 
    }
    system("pause");
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.05.2015, 17:06
Ответы с готовыми решениями:

Добавить конструктор копирования в программу
Здравствуйте! Знаю, что разбираться в чужом коде дело очень веселое, но нужна помощь с добавлением...

Подскажите пожалуйста как добавить конструктор копирования в готовую программу
Вот код программы: # include &lt;iostream&gt; # include &lt;conio.h&gt; # include &lt;string&gt; # include...

Нужно добавить конструктор копирования !
Здравствуйте! Помогите написать конструктор копирования к данной задаче. Честно говоря, не понимаю...

Вставить конструктор копирования в программу
Составить описание класса одномерных массивов строк, каждая строка задается длиной и указателем на...

3
55 / 56 / 34
Регистрация: 29.12.2012
Сообщений: 478
26.05.2015, 17:58 2
Сначала определение научись вне класом писать

Добавлено через 5 минут
Цитата Сообщение от Silense123 Посмотреть сообщение
//library(const library & obj)
* * //{
* * //* firstbook=obj.avtor1
* * //}
исходя из этого ты пытаеся скопировать обьект а у тебя нет памяти
char* Author = new char[50]; в конструкторе память в куче береш
а в конструкторе копий пытаеся скопировать даные в обьект у котоого нет этой памяти

Добавлено через 3 минуты
ты нарисавал рисунок на листке (использовав конструктор)
и начал точ в точ скопировать рисунок на другой листок( конструкторе копий) только вот ты пытаешся сделать это не имея листка
0
0 / 0 / 0
Регистрация: 13.05.2015
Сообщений: 3
26.05.2015, 18:01  [ТС] 3
Если я пропишу firstbook = new char[50]; в классе library это решит проблему с кк?
0
55 / 56 / 34
Регистрация: 29.12.2012
Сообщений: 478
26.05.2015, 20:49 4
Я не пойму зачем он тебе сдесь?

Конструктор копирования нужен в случае:

когда мы передаем объект в какую-либо функцию в виде параметра;
когда какая-либо функция должна вернуть объект класса в результате своей работы;
когда мы в главной функции один объект класса инициализируем другим объектом класса.

C++
1
2
3
4
5
6
        // int firstbook;
 
   //library(const library & obj)
    //{ 
    //  firstbook=obj.avtor1 
    //}
Добавлено через 1 минуту
что ты тут делаеш не понимаю

Добавлено через 1 минуту
Ты пытаеся интовский переменой присвоить свой обьект!

Добавлено через 1 час 6 минут
Ну че там разобрался?
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
#include<iostream>
//#include<vector>
 
using namespace std;
class array{
private:
    int c;//какаято переменная
    int size;
    int *b;
 public : 
  array(int x)
   { 
       size=x;
    cout<<"Работает конструктор\n";
    int *b=new int[size];
 
    c=5; 
   }
array(const array &obj)
 {
    cout<<"Работает Конструктор копий\n";
    size=obj.size;
    b=new int(size);
    c=obj.c;
 }
int get_size()
{
    
    return size;
}
};
 array f(array obj)
{
    cout<<"Размерность масива:"<<obj.get_size()<<endl;
    return obj;
}
int main()
{
    setlocale(LC_ALL,"Rus");
    array  obj(10);
    cout<<"Размерность масива:"<<obj.get_size()<<endl;
    cout<<"Вызываем функцию f:\n";
    f(obj);
    cout<<"Выходим из функцию f:\n";
    system("pause");
    return 0;
}
вот програмка когда я учил сам мне помогла, закоментируй запусти посмотри результаты...
закоментируй f(obj);снова запусти...в этом суть копировшика а не в связывании данных наверно как ты думал
0
26.05.2015, 20:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.05.2015, 20:49
Помогаю со студенческими работами здесь

Классы (объединить мой класс с проверкой на его работу, убрать гото и добавить конструктор копирования)
Доброго времени суток. Подскажите как обьеденить мой класс с проверкой на его работу, убрать...

Не могу сделать чтобы класс содержал основной конструктор и конструктор копирования
Разработать класс ThreeAngle для работы с плоскими треугольниками. В качестве членов-данных...

Конструктор класса, конструктор копирования запускается не тот который нужен
Есть такой конструктор: Neuron::Neuron(int iType_activation_funk) { this-&gt;iType_act =...

Не могу правильно сделать конструктор и конструктор копирования и принадлежность точки с заданными координатами треугольнику
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;windows.h&gt; #include...

Конструктор инициализации, конструктор копирования, деструктор
Я сделал почти задание по перегрузке операторов. Осталось одно, тоесть три: конструктор...

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


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

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