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

Повторный вызов конструктора класса - C++

Восстановить пароль Регистрация
 
TestAddition
2 / 2 / 0
Регистрация: 09.06.2013
Сообщений: 23
01.06.2014, 18:11     Повторный вызов конструктора класса #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
class X
{
  
  public:
    X() {a = 10;};
    setA(int value) {a = value;};
 
  private:
    int a;
};
 
class Y
{
 
  public:
    void func()
    {
       xObj.setA(155);
       // теперь я вновь хочу изменить значение поля a на инициализируемое в конструкторе X
       X restxobj;
       xObj = resetxObj;
       // Подскажите, как можно это сделать иначе, не создавая новый экземпляр?
    };
 
  private:
    X xObj;
};
 
int main()
{
 
  Y yObj;
  yObj.func();
 
  return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,917
Записей в блоге: 2
Завершенные тесты: 1
01.06.2014, 18:14     Повторный вызов конструктора класса #2
C++
1
setA(int value = 10 ) {a = value;}
C++
1
2
3
4
    void func()
    {
       xObj.setA();
    };
TestAddition
2 / 2 / 0
Регистрация: 09.06.2013
Сообщений: 23
01.06.2014, 18:29  [ТС]     Повторный вызов конструктора класса #3
Если в конструкторе будут инициализации для 100 полей, мне 100 раз писать set?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,917
Записей в блоге: 2
Завершенные тесты: 1
01.06.2014, 18:30     Повторный вызов конструктора класса #4
Цитата Сообщение от TestAddition Посмотреть сообщение
Если в конструкторе будут инициализации для 100 полей, мне 100 раз писать set?
ну сделайте функцию reset, для сброса состояния объекта на начальное
TestAddition
2 / 2 / 0
Регистрация: 09.06.2013
Сообщений: 23
01.06.2014, 18:43  [ТС]     Повторный вызов конструктора класса #5
Вы немного не понимаете, что я хочу. Меня интересует не изменение полей, а переинициализация как таковая - не её имитация. Проситься что-то типа xObj = new X();
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,917
Записей в блоге: 2
Завершенные тесты: 1
01.06.2014, 18:45     Повторный вызов конструктора класса #6
Цитата Сообщение от TestAddition Посмотреть сообщение
переинициализация
инициализация проводится только один раз.
Цитата Сообщение от TestAddition Посмотреть сообщение
не её имитация
Вам пример тоже ничего не переинициализирует
TestAddition
2 / 2 / 0
Регистрация: 09.06.2013
Сообщений: 23
01.06.2014, 18:46  [ТС]     Повторный вызов конструктора класса #7
знаю)
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
01.06.2014, 18:53     Повторный вызов конструктора класса #8
Цитата Сообщение от TestAddition Посмотреть сообщение
Повторный вызов конструктора класса
не бывает
это не делфи, конструктор вызывается автоматически при создании объекта и ручками его вызвать невозможно
следовательно повторный вызов невозможен

Добавлено через 3 минуты
Цитата Сообщение от TestAddition Посмотреть сообщение
C++
1
2
3
4
5
xObj.setA(155);
// теперь я вновь хочу изменить значение поля a на инициализируемое в конструкторе X
  X restxobj;
  xObj = resetxObj;
// Подскажите, как можно это сделать иначе, не создавая новый экземпляр?
C++
1
2
xObj.setA(155)
xObj = X();
в памяти создастся временный объект X
потом в дело вступит конструктор копирования
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,917
Записей в блоге: 2
Завершенные тесты: 1
01.06.2014, 18:55     Повторный вызов конструктора класса #9
Цитата Сообщение от ValeryS Посмотреть сообщение
потом в дело вступит конструктор копирования
xObj уже создан, так что оператор присваивания
TestAddition
2 / 2 / 0
Регистрация: 09.06.2013
Сообщений: 23
01.06.2014, 18:58  [ТС]     Повторный вызов конструктора класса #10
Видать нет эстетически верного способа, мне кажется такой вариант попросту убогим:
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
class X
{
 
  public:
    X() {reset();};
    void reset(){a = 10;};
    void setA(int value){a = value;};
   
  private:
    int a;
}
 
int main()
{
 
  x xObj;
 
  xObj.setA(155);
  xObj.reset();
 
  // было бы куда лучше так:
  xObj = new X();
  // избавились бы от индусского метода  
 
  return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.06.2014, 19:05     Повторный вызов конструктора класса
Еще ссылки по теме:

C++ Вызов конструктора базового класса из порожденного
Вызов конструктора базового класса из класса-наследника C++
C++ Вызов конструктора класса

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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
01.06.2014, 19:05     Повторный вызов конструктора класса #11
Цитата Сообщение от Croessmah Посмотреть сообщение
xObj уже создан, так что оператор присваивания
ну да
просто чаше всего они однотипные

Добавлено через 1 минуту
Цитата Сообщение от TestAddition Посмотреть сообщение
// было бы куда лучше так:
xObj = new X();
// избавились бы от индусского метода
ты представляешь что делает new в плюсах?
Yandex
Объявления
01.06.2014, 19:05     Повторный вызов конструктора класса
Ответ Создать тему
Опции темы

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