С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
TestAddition
2 / 2 / 0
Регистрация: 09.06.2013
Сообщений: 23
1

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

01.06.2014, 18:11. Просмотров 419. Ответов 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
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;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2014, 18:11
Ответы с готовыми решениями:

Повторный вызов конструктора?!
Мой небольшой класс class CString { private: char* str; int len; int...

Вызов конструктора базового класса из класса-наследника
Можно ли вне списка инициализации вызвать конструктор базового класса ? ...

Вызов конструктора класса
есть класс Set, и в нем есть конструктор, как с этого конструктора мне массивы...

Вызов конструктора из родительского класса
Как вызвать конструктор для производного класса из родительского?

Вызов конструктора базового класса
Здравствуйте! Я вот начал изучать C# и немножечко освежил ООП. Но вот у меня...

10
Croessmah
++Ͻ
14777 / 8453 / 1605
Регистрация: 27.09.2012
Сообщений: 20,804
Записей в блоге: 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();
    };
0
TestAddition
2 / 2 / 0
Регистрация: 09.06.2013
Сообщений: 23
01.06.2014, 18:29  [ТС] 3
Если в конструкторе будут инициализации для 100 полей, мне 100 раз писать set?
0
Croessmah
++Ͻ
14777 / 8453 / 1605
Регистрация: 27.09.2012
Сообщений: 20,804
Записей в блоге: 2
Завершенные тесты: 1
01.06.2014, 18:30 4
Цитата Сообщение от TestAddition Посмотреть сообщение
Если в конструкторе будут инициализации для 100 полей, мне 100 раз писать set?
ну сделайте функцию reset, для сброса состояния объекта на начальное
0
TestAddition
2 / 2 / 0
Регистрация: 09.06.2013
Сообщений: 23
01.06.2014, 18:43  [ТС] 5
Вы немного не понимаете, что я хочу. Меня интересует не изменение полей, а переинициализация как таковая - не её имитация. Проситься что-то типа xObj = new X();
0
Croessmah
++Ͻ
14777 / 8453 / 1605
Регистрация: 27.09.2012
Сообщений: 20,804
Записей в блоге: 2
Завершенные тесты: 1
01.06.2014, 18:45 6
Цитата Сообщение от TestAddition Посмотреть сообщение
переинициализация
инициализация проводится только один раз.
Цитата Сообщение от TestAddition Посмотреть сообщение
не её имитация
Вам пример тоже ничего не переинициализирует
0
TestAddition
2 / 2 / 0
Регистрация: 09.06.2013
Сообщений: 23
01.06.2014, 18:46  [ТС] 7
знаю)
0
ValeryS
Модератор
7372 / 5573 / 707
Регистрация: 14.02.2011
Сообщений: 18,949
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
потом в дело вступит конструктор копирования
1
Croessmah
++Ͻ
14777 / 8453 / 1605
Регистрация: 27.09.2012
Сообщений: 20,804
Записей в блоге: 2
Завершенные тесты: 1
01.06.2014, 18:55 9
Цитата Сообщение от ValeryS Посмотреть сообщение
потом в дело вступит конструктор копирования
xObj уже создан, так что оператор присваивания
1
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;
}
0
ValeryS
Модератор
7372 / 5573 / 707
Регистрация: 14.02.2011
Сообщений: 18,949
01.06.2014, 19:05 11
Цитата Сообщение от Croessmah Посмотреть сообщение
xObj уже создан, так что оператор присваивания
ну да
просто чаше всего они однотипные

Добавлено через 1 минуту
Цитата Сообщение от TestAddition Посмотреть сообщение
// было бы куда лучше так:
xObj = new X();
// избавились бы от индусского метода
ты представляешь что делает new в плюсах?
0
01.06.2014, 19:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.06.2014, 19:05

Вызов конструктора родительского класса
Здравствуйте, столкнулся с такой проблемой: при вызове конструктора класса...

Вызов конструктора шаблонного класса
Есть шаблонный класс стек, он является полем в классе Express, но компилятор...

Непонятный вызов конструктора класса
Почему в строчке d1=500; (70 стр.) вызывается конструктор CDate(500, 1, 2000)?...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

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