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

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

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

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

08.03.2009, 01:52. Просмотров 642. Ответов 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++
Вчера сделал очень интересную и болезненную ошибку (с точки зрения времени, так как искал я ее долго)... представьте структуру (битовое...

Копировать значение поля m_moo в значение поля m_moo класса foo - C++
А что означает запись? Foo1(Foo1 const&amp; foo):m_moo(foo.moo) то что это к.копирования понятно.Не понятно,зачем список инициализации.... ...

Неизменяемые буквы в конце EditText - Программирование Android
Всем привет! Столкнулась с вот такой проблемкой. Во вложении картинка, которую мне нужно реализовать. Но вот вопрос, как сохранить...

Неизменяемые классы. Почему final? - Java SE
Здравствуйте. Не понимаю зачем неизменяемым классам нужно приписывать final, то есть запрещать наследование. Как через наследование можно...

Как лучше разместить неизменяемые данные в строке? - C (СИ)
Здравствуйте уважаемые программисты Задача у меня следующая --- есть некоторая строка, которая пишется в контроллер при компиляции как...

StringGrid: неизменяемые ячейки, но с возможностью копирования в буфер обмена - C++ Builder
Применил для StringGrid'а Popup Menu с двумя пунктами из Edit (которые добавил в свой Action List) : Copy, Select All. Кликаю по ячейке,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ISergey
Maniac
Эксперт С++
1373 / 884 / 52
Регистрация: 02.01.2009
Сообщений: 2,653
Записей в блоге: 1
08.03.2009, 03:08 #2
Цитата Сообщение от qwert Посмотреть сообщение
C++
1
2
private:    
const char* itsName;
это есть ошибка(const убери)!!!
Цитата Сообщение от qwert Посмотреть сообщение
В задаче есть условие, что в классе есть неизменяемые поля,
просто не делай методы которые могут изменить то поле.
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
08.03.2009, 23:22  [ТС] #3
Спасибо!
То есть, насколько я понял, нельзя объявить константное поле, а потом через крнструктор его изменить, и чтобы оно больше не менялось.
Kalashnikov
14 / 14 / 1
Регистрация: 08.02.2009
Сообщений: 63
09.03.2009, 01:23 #4
оно итак в приватной области видимости, никто другой кроме этого класса его достать неможет
Somebody
2788 / 1602 / 145
Регистрация: 03.12.2007
Сообщений: 4,193
Завершенные тесты: 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. Важно - значения полей в списке инициализации не должны зависеть друг от друга,потому что порядок инициализации в списке инициализации зависит от реализации.
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
10.03.2009, 00:43  [ТС] #7
Всем сапасибо за ответы!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.03.2009, 00:43
Привет! Вот еще темы с ответами:

Зависимые поля (список значений одного поля зависит от значения другого поля) - MS Access
Здравствуйте, Уважаемые участники форума, изучив множество подобных вопросов на разных форумах, не смог найти для себя нужный вариант....

Как связать между собой два поля (список значений одного поля зависит от значения другого поля) - MS Access
Есть таблица: предмет, КодТипаМатериала (список), КодМатериала (список) для примера: стул, ткань, чёрное сукно ...

Невозможно выполнить выборку по имени поля (по номеру поля все работает) - C#
Вот кусок кода: conn = new SqlCeConnection(&quot;Data Source = Database.sdf;&quot;); conn.Open(); ...

Обновление одного поля таблицы, при заполнении поля в другой таблице - MS Access
Друзья помогите новичку! Есть две таблицы -продажа(id продажи, сумма продажи) -скидка(id скидки, id продажи, скидка 15%) Как...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
10.03.2009, 00:43
Ответ Создать тему
Опции темы

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