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

вызвать конструктор - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Damir1990
1 / 1 / 0
Регистрация: 01.10.2011
Сообщений: 40
15.12.2011, 12:05     вызвать конструктор #1
как вызвать конструктор?
std::cout << "7) Вызов конструктора;"<<std::endl;
case '7' :
что нужно ввести что бы при нажатии кнопки 7 он запусьтил конструктор

вот мой конструктор
fridge() : cash ( -1 ){}
fridge( std::string &c);
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
LosAngeles
Заблокирован
15.12.2011, 12:29     вызвать конструктор #2
fridge();
Bers
Заблокирован
15.12.2011, 13:11     вызвать конструктор #3
Цитата Сообщение от Damir1990 Посмотреть сообщение
как вызвать конструктор?
надеюсь, вы осознаете, что конструкторы вызываются автоматически при создании объекта?
И что "вызов конструктора" равносильно "создать объект" ?

Вы отдаёте себе отчет в том, что:

C++
1
2
3
std::cout<< std::string("привет!")<<std::endl; //здесь не просто будит 
                                                  //запущен конструктор объекта
                                     //а будит создан полноценный безымянный объект
Вы уверены, что при нажатии кнопки 7, должен быть создан объект?

/зы И будит совсем не плохо уточнить время жизни безымянных объектов, дабы не удивляться потом, что объект вроде был, а теперь его уже нет...
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
15.12.2011, 15:51     вызвать конструктор #4
Цитата Сообщение от Bers Посмотреть сообщение
И что "вызов конструктора" равносильно "создать объект"
Не совсем же. Вроде вы сами же говорили мне)
Bers
Заблокирован
15.12.2011, 16:09     вызвать конструктор #5
Цитата Сообщение от Chelioss Посмотреть сообщение
Не совсем же. Вроде вы сами же говорили мне)
Вот сюда глянь:

http://liveworkspace.org/code/821253...6afd22f7b033e6
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
15.12.2011, 16:14     вызвать конструктор #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
struct Test {
   Test() { std::cout << "constructor" << std::endl; }
   ~Test() { std::cout << "destructor" << std::endl; }
};
 
int main() {
   Test *test = NULL;
   int c = 0;
   
   switch (c) {
   case 7:
      test = new Test();
   }
   
   if (test) {
      delete test;
   }
}
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
15.12.2011, 17:56     вызвать конструктор #7
Цитата Сообщение от Bers Посмотреть сообщение
Вот сюда глянь
Я о том, что поля объекта создаются и удаляются только 1 раз, а именно при первом создании объекта и в конце блока(локальный объект) или программы(глобальный). Хоть сто раз вызови конструктор и деструктор, поля объекта не будет создаваться и удаляться вновь.
Я в одной теме как раз спрашивал, почему можно вызывать конструктор и деструктор много раз.

Добавлено через 29 секунд
fasked
А что вы этим хотите сказать?
Bers
Заблокирован
15.12.2011, 19:48     вызвать конструктор #8
Цитата Сообщение от Chelioss Посмотреть сообщение
Хоть сто раз вызови конструктор
Ну к, покажи, как ты можешь 100 раз вызвать конструктор без создания объекта.

Ещё раз взгляни на тест-иллюстрацию: http://liveworkspace.org/code/8133b9...097ce470fed59a

Я его дополнил для случая запуска конструктора изнутри самого объекта. Эксперимент наглядно показывает, что невозможно запустить конструктор, не создавая объекта.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
15.12.2011, 20:11     вызвать конструктор #9
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Bers Посмотреть сообщение
Ну к, покажи, как ты можешь 100 раз вызвать конструктор без создания объекта.
Да не вопрос!
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
#include <iostream>
 
class Hundred {
public:
    Hundred(int n) {
        if ( n < 100 )
            throw ( n );
    }
};
 
int main(){
    for ( int i = 0; i < 101; ++i ){
        try {
            Hundred * h = new Hundred(i);
            std::cout << "Created." << std::endl;
            delete h;
        }
        catch ( int e ){
            std::cout << ( e + 1 ) << std::endl;
        }
    }
    
    return 0;
}

Не по теме:

Цитата Сообщение от Bers Посмотреть сообщение
здесь не просто будит
Это какая-то разновидность упёртости?

Bers
Заблокирован
15.12.2011, 20:16     вызвать конструктор #10
C++
1
Hundred * h = new Hundred(i); //здесь типа объект не создаётся?
Добавлено через 3 минуты
Цитата Сообщение от easybudda Посмотреть сообщение
Это какая-то разновидность упёртости?
Это типа мне похрену, что лично ты об этом думаешь.
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
15.12.2011, 20:21     вызвать конструктор #11
Вы меня не поняли. (Где я говорил, что можно вызвать конструктор без создания объекта?)
Еще раз объясняю( а не вы мне ли это объяснили?)):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class type{ int value; };
int main() 
{ 
     type obj; // тут выделится память в стэке для value( а вообще вроде бы память в стэке  выделиться сразу при запуске функции main. Могу ошибаться)
     obj.type::type(); // тут и дальше ничего не произойдет с value
     obj.type::type();
     obj.~type();
     obj.~type();
     obj.type::type();
     obj.type::type();
     obj.~type();
     obj.~type();
}     // тут уничтожиться value
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
struct Test {
   Test() { std::cout << "constructor" << std::endl; }
   ~Test() { std::cout << "destructor" << std::endl; }
   int value;
};
 
int main() {
   Test *test = NULL;
 
   test = new Test(); // выделиться память для  value тут
   test->Test::Test();
   test->~Test();
   test->Test::Test();
   test->~Test();
   delete test; // тут освободиться память, которую занимал  value
   system("pause");
}
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
15.12.2011, 20:21     вызвать конструктор #12
Цитата Сообщение от Bers Посмотреть сообщение
здесь типа объект не создаётся?
Типа нет. Учи матчасть.

Цитата Сообщение от Bers Посмотреть сообщение
Это типа мне...
Приз выдан.
LosAngeles
Заблокирован
16.12.2011, 19:04     вызвать конструктор #13
Chelioss, видимо это незадокументированная возможность visual studio, причём довольно тупая и бесполезная
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
16.12.2011, 19:37     вызвать конструктор #14
Цитата Сообщение от LosAngeles Посмотреть сообщение
Chelioss, видимо это незадокументированная возможность visual studio, причём довольно тупая и бесполезная
Не согласен.
C++
1
2
3
4
5
6
7
template< class Ty_ >
Department< Ty_ > &Department< Ty_ >::operator = ( const Department< Ty_ > &depart )
{
    this->Department::~Department();
    this->Department::Department( depart );
    return *this;
}
Может это плохо, а может нет, но выглядит очень просто и понятно.
Так же это лучше, чем копировать весь код с деструктора и конструктора копирования.
LosAngeles
Заблокирован
16.12.2011, 20:04     вызвать конструктор #15
Цитата Сообщение от Chelioss Посмотреть сообщение
this->Department:epartment( depart );
new(this) Department(depart);


эта конструкция никому непонятна кроме тебя и непереносима, да и раз её нет в С++ то вобще глупо её обсуждать.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2011, 20:19     вызвать конструктор
Еще ссылки по теме:

Как вызвать конструктор с параметрами в конструкторе без параметров? C++
C++ Как вызвать другой конструктор для уже созданного объекта конструктором по умолчанию?
Как правильно вызвать конструктор вектора в данном случае? C++

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

Или воспользуйтесь поиском по форуму:
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
16.12.2011, 20:19     вызвать конструктор #16
Цитата Сообщение от LosAngeles Посмотреть сообщение
эта конструкция никому непонятна кроме
Чего тут не понятного? Вы не знаете, что такое конструктор копирования?
Yandex
Объявления
16.12.2011, 20:19     вызвать конструктор
Ответ Создать тему
Опции темы

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