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

Классы: конструктор копий - C++

Восстановить пароль Регистрация
 
OKS_by_V
1 / 1 / 0
Регистрация: 15.05.2011
Сообщений: 78
22.02.2012, 13: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
//ÑîçäГ*ГІГј ГЄГ®Г*ñòðóêòîð êîïèé ГЁ îïåðГ*òîð ïðèñâГ*ГЁГўГ*Г*ГЁГї äëÿ ГЄГ«Г*Г±Г±Г* êîìïüþòåð ГЁ ÷ëåГ*Г* ГЄГ«Г*Г±Г±Г* Г¬Г*ðêГ*.
#include <iostream>
using std::cout;
 
class computer
{ 
        int mark;
public:
        computer(int value): mark(value) {} 
 
void setFrequency (int new_value) 
{ 
        mark = new_value;
}
 
computer& operator = (computer& temp)
{
        if (this == &temp) 
                return *this;
        this->mark = temp.mark;
}
 
friend std::ostream & operator << ( std::ostream& cout, computer& temp)
{
        cout<<temp.mark;
        return cout;
}
 
};
 
int main()
{
        computer a (10);
        computer b = a;
        cout<<b<<"\n";
        system ("pause");
        return EXIT_SUCCESS;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Luke
37 / 37 / 1
Регистрация: 21.02.2012
Сообщений: 95
22.02.2012, 14:44     Классы: конструктор копий #2
OKS_by_V, ты все сделал правильно единственное что можно поменять это
C++
1
explicit computer(int value);
ну и еще

C++
1
2
3
4
5
6
7
computer& operator = (computer& temp)
{
        if (this == &temp) 
                return *this;
        this->mark = temp.mark;
return *this; //надо все таки вернуть значение 
}
Объясню почему.

если где то написать
C++
1
computer b = 10;//ну бывает сделал ошибку в программе и не заметил
то это вызов превратится в

C++
1
computer b = computer(10);// этот временный объект будет потом уничтожен.
т.е. вызовется конструктор computer(int value); создастся временный объект computer(10);

explicit - не даст сделать этого неявного приведения
и ты сможешь обнаружить ошибку тут computer b = 10;

так что ты правильно написал оператор присваивания, исправь просто констуктор создания


а это конструктор копирования
C++
1
2
3
4
5
6
computer(const computer& temp)
{
        if (this == &temp) 
                return;
        this->mark = temp.mark;
}
OKS_by_V
1 / 1 / 0
Регистрация: 15.05.2011
Сообщений: 78
23.02.2012, 18:41  [ТС]     Классы: конструктор копий #3
Спасибо ....

а как и на что изменить можешь сбросить код??
Luke
37 / 37 / 1
Регистрация: 21.02.2012
Сообщений: 95
23.02.2012, 22:40     Классы: конструктор копий #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
#include <iostream>
using std::cout;
 
class computer
{ 
        int mark;
public:
       explicit computer(int value): mark(value) {} //explicit добавлено
 
 
computer(const computer& temp) //конструктор копирования
{
        if (this == &temp) 
                return;
        this->mark = temp.mark;
}
 
void setFrequency (int new_value) 
{ 
        mark = new_value;
}
 
computer& operator = (const computer& temp)
{
        if (this == &temp) 
                return *this;
        this->mark = temp.mark;
return *this; //надо все таки вернуть значение 
}
 
friend std::ostream & operator << ( std::ostream& cout, computer& temp)
{
        cout<<temp.mark;
        return cout;
}
 
};
 
int main()
{
        computer a (10);
        computer b = a;
        cout<<b<<"\n";
        system ("pause");
        return EXIT_SUCCESS;
}
Yandex
Объявления
23.02.2012, 22:40     Классы: конструктор копий
Ответ Создать тему
Опции темы

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