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

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

Войти
Регистрация
Восстановить пароль
 
TestAddition
2 / 2 / 0
Регистрация: 09.06.2013
Сообщений: 23
#1

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

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

Повторный вызов конструктора?! - C++
Мой небольшой класс class CString { private: char* str; int len; int real_size; public: CString() : len(0),...

Вызов конструктора класса - C++
есть класс Set, и в нем есть конструктор, как с этого конструктора мне массивы перенести в метод другого класса так что бы над ними можно...

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

Вызов конструктора шаблонного класса - C++
Есть шаблонный класс стек, он является полем в классе Express, но компилятор выдает ошибку " Ошибка 1 error C2614: Express: недопустимая...

Вызов конструктора родительского класса - C++
Здравствуйте, столкнулся с такой проблемой: при вызове конструктора класса потомка (Derv1) через наследование конструктора из базового...

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

Вызов конструктора базового класса из порожденного - C++
Есть Базовый класс студент: имеет поля: фамилия, адрес, тел., возраст. Порожденный класс группа: имя группы, кол-во студентов в...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 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
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 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
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
01.06.2014, 18:45     Повторный вызов конструктора класса #6
Цитата Сообщение от TestAddition Посмотреть сообщение
переинициализация
инициализация проводится только один раз.
Цитата Сообщение от TestAddition Посмотреть сообщение
не её имитация
Вам пример тоже ничего не переинициализирует
TestAddition
2 / 2 / 0
Регистрация: 09.06.2013
Сообщений: 23
01.06.2014, 18:46  [ТС]     Повторный вызов конструктора класса #7
знаю)
ValeryS
Модератор
6537 / 5003 / 460
Регистрация: 14.02.2011
Сообщений: 16,636
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
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 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++
В инете немного почиатл про наследование и решил сразу перейти к практике Есть два класа point и apoint вот хидер #ifndef...

Неявный вызов конструктора шаблонного класса при операции сравнения - C++
Реализовал шаблонный класс целых чисел, для использования его в шаблонном классе дробей. Звучит жутковасто. :D Так вот, в классе целых...

Повторный вызов процедуры - C++
Всем очень добрый день! А подскажите,пожалуйста,в Си++ процедура может вызываться несколько раз в различных местах кода,как в Паскале?

Повторный вызов деструктора - C++
{ bar b; b.~bar(); } В данном примере деструктор bar вызовется дважды. Как у уже удаленного объекта может вызываться...

Исключительные ситуации (повторный вызов деструктора) - C++
Всем привет ! Подскажите пожалуйста , почему повторно вызываются деструкторы класса A,B,C? #include <stdio.h> #include...


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

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

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

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