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

Конструктор копии в Классах

06.04.2016, 21:59. Показов 584. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите пожалуйста правильно ли я написала и вызвала конструктор копии и деструктор, а то мне выдает 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
#include <iostream.h>
#include <conio.h>
#include <string.h>
 
class Employee{
public:
   //Konstruktor bez parametrov
   Employee();
 
   //Konstruktor s parametrami
   void setEmployee (char *, int, int);
 
   //Konstruktor kopii
   Employee ( const Employee &);
 
   //Destruktor
   ~Employee ();
 
   void printEmployee ();
private:
   char name[25];
   int age;
   int gaffer;
};
 
Employee::Employee ()  {
age = gaffer = 0;
char *k="pustoi";
int length = strlen(k);
length = length < 25 ? length : 24;
strncpy (name, k, length);
name[length] = '\0';
 ; }
void Employee::setEmployee (char *n, int a, int g)
{
int length = strlen(n);
length = length < 25 ? length : 24;
strncpy (name, n, length);
name[length] = '\0';
age=a;
gaffer=g;
}
 
void Employee::printEmployee ()
{
 
cout <<"Imja slujashego: " << endl << name << endl <<
"Vozrast: " << endl << age << endl <<
"Stag: " <<endl << gaffer << endl;
}
 
// Konstruktor kopii
Employee ( const Employee & obj)
    {
        memcpy(name,obj.name,NAMESIZE);
        age = obj.age;
        gaffer = obj.gaffer;
    }
 
 //Destruktor
    ~Employee (){};
 
main ()
{
clrscr ();
Employee e;
e.printEmployee ();
cout << endl;
e.setEmployee ("Ivan", 21, 1);
Employee e2 ("Egor", 21, 1);
e2.printEmployee();
 
Employee e3(e2);
e3.printEmployee ();
getch ();
return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.04.2016, 21:59
Ответы с готовыми решениями:

Конструктор копии
Конструктор копии вызывается при: 1)явном создании копии 2)при передачи параметров в функцию (по...

конструктор копии
Мне кажется что здесь также должен вызывать конструктор копия при возврате объекта obj из функции...

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

Конструктор копии
Здравствуйте! Не могу никак правильно использовать конструктор копии, тоесть создать копию обьекта...

10
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
06.04.2016, 22:16 2
strcpy() используй, а не memcpy().
В первом конструкторе нет смысла проверять длину, если и так известно, что копируется - там тоже strcpy() хватит.
0
0 / 0 / 0
Регистрация: 17.11.2015
Сообщений: 46
06.04.2016, 22:21  [ТС] 3
Цитата Сообщение от nmcf Посмотреть сообщение
strcpy() используй, а не memcpy().
Всё равно 2 ошибки
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
06.04.2016, 22:24 4
Актуальный вариант покажи и текст ошибок.
0
Вездепух
Эксперт CЭксперт С++
12792 / 6669 / 1795
Регистрация: 18.10.2014
Сообщений: 16,875
06.04.2016, 22:34 5
Цитата Сообщение от 123c Посмотреть сообщение
Employee ( const Employee & obj)
Определения членов класса за пределами класса делаются при помощи квалифицированного имени, т.е. имени с префиксом Employee::. Вы об этом знаете, суда по другим определениям (и конструктор по умолчанию вы определили с правильным именем). Почему тогда определение конструктора копирования у вас сделано без этого префикса???

Та же проблема в определении деструктора.

Добавлено через 1 минуту
Цитата Сообщение от 123c Посмотреть сообщение
main ()
int main(). int.

Добавлено через 1 минуту
Зачем вы написали в этом классе явный деструктор, когда деструктировать там совершенно нечего - не понятно.
0
Эксперт С++
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
06.04.2016, 22:38 6
Цитата Сообщение от 123c Посмотреть сообщение
Подскажите пожалуйста правильно ли я написала и вызвала конструктор копии и деструктор
не правильно.

Цитата Сообщение от 123c Посмотреть сообщение
а то мне выдает 2 ошибки.
привести которые конечно же не обязательно.

а зачем? это же такой тест на внимательность:
местные телепаты сами, глядя на неумелые закорючки
должны догадаться, что с ними не так.

это:
C++
1
2
3
4
5
6
7
8
9
10
// Konstruktor kopii
Employee ( const Employee & obj)
    {
        memcpy(name,obj.name,NAMESIZE);
        age = obj.age;
        gaffer = obj.gaffer;
    }
 
 //Destruktor
    ~Employee (){};
заменить на это:
C++
1
2
3
4
5
6
7
8
9
10
// Konstruktor kopii
Employee::Employee ( const Employee & obj)
    {
        memcpy(name,obj.name,24);
        age = obj.age;
        gaffer = obj.gaffer;
    }
 
 //Destruktor
    Employee::~Employee (){};
0
0 / 0 / 0
Регистрация: 17.11.2015
Сообщений: 46
06.04.2016, 22:40  [ТС] 7
1.Error LABA1-1.CPP 53: Declaration terminated incorrectly
2.Error LABA1-1.CPP 70:Could not find a match for "Employee::Employee(char *,int,int)"
0
Эксперт С++
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
06.04.2016, 22:44 8
Цитата Сообщение от 123c Посмотреть сообщение
2.Error LABA1-1.CPP 70:Could not find a match for "Employee::Employee(char *,int,int)"
рядом с этим:

C++
1
2
3
4
5
6
7
8
9
void Employee::setEmployee (char *n, int a, int g)
{
int length = strlen(n);
length = length < 25 ? length : 24;
strncpy (name, n, length);
name[length] = '\0';
age=a;
gaffer=g;
}
покласть это:

C++
1
2
3
4
Employee::Employee(char *n, int a, int g)
{
    setEmployee (n,a,g);
}
0
0 / 0 / 0
Регистрация: 17.11.2015
Сообщений: 46
06.04.2016, 22:52  [ТС] 9
Цитата Сообщение от hoggy Посмотреть сообщение
заменить на это:
всё равно эта ошибка осталась: Error LABA1-1.CPP 70:Could not find a match for "Employee::Employee(char *,int,int)"

Добавлено через 5 минут
Цитата Сообщение от hoggy Посмотреть сообщение
рядом с этим:
правильно?

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
#include <iostream.h>
#include <conio.h>
#include <string.h>
 
class Employee{
public:
   //Konstruktor bez parametrov
   Employee();
 
   //Konstruktor s parametrami
   void setEmployee (char *, int, int);
 
   //Konstruktor kopii
   Employee ( const Employee &);
 
   //Destruktor
   ~Employee ();
 
   void printEmployee ();
private:
   char name[25];
   int age;
   int gaffer;
};
 
Employee::Employee ()  {
age = gaffer = 0;
char *k="pustoi";
int length = strlen(k);
length = length < 25 ? length : 24;
strncpy (name, k, length);
name[length] = '\0';
 ; }
void Employee::setEmployee (char *n, int a, int g)
{
int length = strlen(n);
length = length < 25 ? length : 24;
strncpy (name, n, length);
name[length] = '\0';
age=a;
gaffer=g;
}
Employee::Employee (char *n, int a, int g)
{
   setEmployee (n,a,g);
}
 
void Employee::printEmployee ()
{
 
cout <<"Imja slujashego: " << endl << name << endl <<
"Vozrast: " << endl << age << endl <<
"Stag: " <<endl << gaffer << endl;
}
 
// Konstruktor kopii
Employee::Employee ( const Employee & obj)
    {
    memcpy(name,obj.name,24);
        age = obj.age;
        gaffer = obj.gaffer;
    }
 
 //Destruktor
   Employee:: ~Employee (){};
 
main ()
{
clrscr ();
Employee e;
e.printEmployee ();
cout << endl;
e.setEmployee ("Ivan", 21, 1);
Employee e2 ("Ivan", 21, 1);
e2.printEmployee();
 
Employee e3(e2);
e3.printEmployee ();
cout <<"Destruktor rabotaet";
getch ();
return 0;
}
0
0 / 0 / 0
Регистрация: 17.11.2015
Сообщений: 46
06.04.2016, 22:58  [ТС] 10
Цитата Сообщение от hoggy Посмотреть сообщение
делделделдел
не поняла?
0
Эксперт С++
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
06.04.2016, 23:00 11
http://rextester.com/ORP12246

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
#include <iostream>    //<--------- исправленно 
#include <string.h>
 
class Employee{
public:
   //Konstruktor bez parametrov
   Employee();
    
   Employee (const char *n, int a, int g);     //<--------- исправленно 
 
   //Konstruktor s parametrami
   void setEmployee (const char *, int, int); //<--------- исправленно 
 
   //Konstruktor kopii
   Employee ( const Employee &);
 
   //Destruktor
   ~Employee ();
 
   void printEmployee ();
private:
   char name[25];
   int age;
   int gaffer;
};
 
Employee::Employee ()  {
age = gaffer = 0;
const char *k="pustoi";    //<--------- исправленно 
int length = strlen(k);
length = length < 25 ? length : 24;
strncpy (name, k, length);
name[length] = '\0';
 ; }
 
 
void Employee::setEmployee (const char *n, int a, int g) //<--------- исправленно 
{
int length = strlen(n);
length = length < 25 ? length : 24;
strncpy (name, n, length);
name[length] = '\0';
age=a;
gaffer=g;
}
 
 
Employee::Employee (const char *n, int a, int g)     //<--------- исправленно 
{
   setEmployee (n,a,g);
}
 
void Employee::printEmployee ()
{
 
std::cout <<"Imja slujashego: \n"  << name <<          //<--------- исправленно 
"\nVozrast: " << '\n' << age << 
"\nStag: " <<'\n' << gaffer << '\n';
}
 
// Konstruktor kopii
Employee::Employee ( const Employee & obj)
    {
    memcpy(name,obj.name,24);
        age = obj.age;
        gaffer = obj.gaffer;
    }
 
 //Destruktor
   Employee:: ~Employee (){};
 
int main ()                         //<--------- исправленно 
{
// clrscr ();                    //<--------- исправленно 
Employee e;
e.printEmployee ();
std::cout << std::endl;
e.setEmployee ("Ivan", 21, 1);
Employee e2 ("Ivan", 21, 1);
e2.printEmployee();
 
Employee e3(e2);
e3.printEmployee ();
std::cout <<"Destruktor rabotaet";    //<----- исправленно
//getch ();                           //<----- исправленно
return 0;
}
0
06.04.2016, 23:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.04.2016, 23:00
Помогаю со студенческими работами здесь

Не вызывается конструктор копии
#define st system(&quot;pause&quot;); #include &lt;iostream&gt; #include &lt;string.h&gt; using namespace std; class...

Конструктор копии и операторы
list::list(list const&amp; l) { l.H(); if (l.head==NULL) {head=present=NULL; return;}...

Почему не вызывается конструктор копии?
Почему не вызывается конструктор копии? class CPoint { friend std::istream...

Приоритетная очередь и конструктор копии
День добрый, форумчане! Прошу просвятить в таком вопрос: -имеется класс, и в мейне пытаюсь...


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

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