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

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

Войти
Регистрация
Восстановить пароль
 
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
#1

Неизменяемые поля - C++

08.03.2009, 01:52. Просмотров 623. Ответов 6
Метки нет (Все метки)

В задаче есть условие, что в классе есть неизменяемые поля, а инициализировать их нужно через конструктор. Например,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
class name
{
public:
    name (const char* txt)
    {
        itsName = new char [strlen (txt) + 1];
        strcpy (itsName, txt);
    };
private:
    const char* itsName;
};
 
int main ()
{
    name ABC ("ABC");
    return 0; 
}
Выдаёт сообщение в функции strcpy: cannot convert parameter 1 from 'const char *' to 'char *'
Можно ли в класее сделать константные поля или можно только поместить это поле в private и не писать метод для изменения этого поля?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.03.2009, 01:52     Неизменяемые поля
Посмотрите здесь:

C++ Битовые поля
Битовые поля C++
C++ Битовые поля
битовые поля C++
поля класса C++
Поля C++
Копировать значение поля m_moo в значение поля m_moo класса foo C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1345 / 878 / 51
Регистрация: 02.01.2009
Сообщений: 2,643
Записей в блоге: 1
08.03.2009, 03:08     Неизменяемые поля #2
Цитата Сообщение от qwert Посмотреть сообщение
C++
1
2
private:    
const char* itsName;
это есть ошибка(const убери)!!!
Цитата Сообщение от qwert Посмотреть сообщение
В задаче есть условие, что в классе есть неизменяемые поля,
просто не делай методы которые могут изменить то поле.
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
08.03.2009, 23:22  [ТС]     Неизменяемые поля #3
Спасибо!
То есть, насколько я понял, нельзя объявить константное поле, а потом через крнструктор его изменить, и чтобы оно больше не менялось.
Kalashnikov
 Аватар для Kalashnikov
14 / 14 / 1
Регистрация: 08.02.2009
Сообщений: 63
09.03.2009, 01:23     Неизменяемые поля #4
оно итак в приватной области видимости, никто другой кроме этого класса его достать неможет
Somebody
2775 / 1589 / 142
Регистрация: 03.12.2007
Сообщений: 4,162
Завершенные тесты: 1
09.03.2009, 13:07     Неизменяемые поля #5
Если пишешь на C++, можно использовать string
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <string>
 
using namespace std;
 
class name
{
public:
  name (string txt);
private:
  const string itsName;
};
 
name::name (string txt)
  : itsName(txt)
  {
  };
 
int main ()
{
  name ABC ("ABC");
  return 0;
}
Night_Light
17 / 17 / 2
Регистрация: 14.02.2009
Сообщений: 86
09.03.2009, 14:16     Неизменяемые поля #6
Цитата Сообщение от qwert Посмотреть сообщение
В задаче есть условие, что в классе есть неизменяемые поля, а инициализировать их нужно через конструктор. Например,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
class name
{
public:
    name (const char* txt)
    {
        itsName = new char [strlen (txt) + 1];
        strcpy (itsName, txt);
    };
private:
    const char* itsName;
};
 
int main ()
{
    name ABC ("ABC");
    return 0; 
}
Выдаёт сообщение в функции strcpy: cannot convert parameter 1 from 'const char *' to 'char *'
Можно ли в класее сделать константные поля или можно только поместить это поле в private и не писать метод для изменения этого поля?
Константные поля класса инициализируются значениями в конструкторе в списке инициализации - как это сделал Somebody. Важно - значения полей в списке инициализации не должны зависеть друг от друга,потому что порядок инициализации в списке инициализации зависит от реализации.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.03.2009, 00:43     Неизменяемые поля
Еще ссылки по теме:

C++ Битовые поля
Битовые поля C++
C++ Поля в синглтоне
Поля в объектах C++
C++ Битовые поля

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

Или воспользуйтесь поиском по форуму:
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
10.03.2009, 00:43  [ТС]     Неизменяемые поля #7
Всем сапасибо за ответы!
Yandex
Объявления
10.03.2009, 00:43     Неизменяемые поля
Ответ Создать тему
Опции темы

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