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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
msangel
0 / 0 / 0
Регистрация: 10.03.2010
Сообщений: 13
#1

Константные поля и операция присвоения - как быть? - C++

08.05.2010, 06:52. Просмотров 1361. Ответов 4
Метки нет (Все метки)

У меня в классе реализовано константное поле:
C++
1
int const constant;
инициализация такой переменной происходит в конструкторе в списке инициализации:
C++
1
2
3
GoodClass::GoodClass(char* str,int inint):constant(inint){
//...
};
по идее ясно, что изменить такое поле невозможно
но если надо?(
мой класс перегружает операцию присвоения:

C++
1
2
3
const GoodClass& GoodClass::operator = (const GoodClass& T){
//...
};
однако список инициализации возле него не возможно создать(((
возможно ли при переприсвоении тогда как нибудь иначием образом изменить константную переменную, чтоб не терять объект(допустим объект обладает уникальным ресурсом, который нужен при его дальнейшей работе и который невозможно скопировать/получить заново !!!)?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.05.2010, 06:52     Константные поля и операция присвоения - как быть?
Посмотрите здесь:
Константные поля класса C++
C++ Константные поля и методы
Константные и не константные ссылки. Приведения типов. Нужно уточнение C++
C++ Создать класс Massiv (матрица вещественных чисел), количество строк и столбцов константные поля.
C++ Есть структура, компилятор считывает некоторые её поля ТОЛЬКО из адресов, кратным двум, а их там нет! (полей), как быть?
Как правильно объявлять статические константные объекты в классе? C++
C++ Поля структуры: код телевизионного канала, название, цена. Операция: найти самый дорогой канал
C++ Какие из этих методов можно и стоит отметить как константные (имеется ввиду логическая константность)
Оператор присвоения копии для класса, действующего как значения C++
Реализовать класс Account, представляющий собой банковский счет. В классе должны быть четыре поля C++
Константные объекты C++
Константные функции C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Roma_F
331 / 246 / 5
Регистрация: 13.12.2009
Сообщений: 589
08.05.2010, 12:20     Константные поля и операция присвоения - как быть? #2
защитить "уникальный ресурс" можно и так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class GoodClass
{
    private:
        int constant;
    public:
        GoodClass(int inint) : constant(inint) {};
        const GoodClass& GoodClass::operator = (const GoodClass& T) { constant = T.GetConstant(); };
        int GetConstant (void) const { return constant; };
};
 
int main()
{
    GoodClass a(5);
    GoodClass b(6);
    a = b;
    cout << a.GetConstant() << endl;
    cout << b.GetConstant() << endl;
 
    return 0;
}
msangel
0 / 0 / 0
Регистрация: 10.03.2010
Сообщений: 13
07.07.2010, 18:50  [ТС]     Константные поля и операция присвоения - как быть? #3
Цитата Сообщение от Roma_F Посмотреть сообщение
защитить "уникальный ресурс" можно и так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class GoodClass
{
    private:
        int constant;
    public:
        GoodClass(int inint) : constant(inint) {};
        const GoodClass& GoodClass::operator = (const GoodClass& T) { constant = T.GetConstant(); };
        int GetConstant (void) const { return constant; };
};
 
int main()
{
    GoodClass a(5);
    GoodClass b(6);
    a = b;
    cout << a.GetConstant() << endl;
    cout << b.GetConstant() << endl;
 
    return 0;
}
Error 1 error C4716: 'GoodClass::operator=' : must return a value tryconstatncopyying\main.cpp 8

C++
1
const GoodClass& GoodClass::operator = (const GoodClass& T) { constant = T.GetConstant(); return *this;};
гм... странно но работает, хотя не должно, т.к. изменять константные поля как бы запрещено после конструирования обьекта...
Nick Alte
Эксперт С++
1608 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,930
Завершенные тесты: 1
08.07.2010, 00:07     Константные поля и операция присвоения - как быть? #4
Специально для таких случаев, когда объект константный, а изменить его приспичило, изобретён оператор const_cast.
C++
1
const GoodClass& GoodClass::operator = (const GoodClass& T) { const_cast<int&>(constant) = T.GetConstant(); }
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
08.07.2010, 00:15     Константные поля и операция присвоения - как быть? #5
msangel, сделайте поле constant закрытым, а не константным, как посоветовал Roma_F, и не надо будет никаких трюков. Или константность принципиальна? До и что это за константа если ее нужно менять?
Yandex
Объявления
08.07.2010, 00:15     Константные поля и операция присвоения - как быть?
Ответ Создать тему
Опции темы

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