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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Damir1990
1 / 1 / 0
Регистрация: 01.10.2011
Сообщений: 40
#1

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

15.12.2011, 12:05. Просмотров 1285. Ответов 15
Метки нет (Все метки)

как вызвать конструктор?
std::cout << "7) Вызов конструктора;"<<std::endl;
case '7' :
что нужно ввести что бы при нажатии кнопки 7 он запусьтил конструктор

вот мой конструктор
fridge() : cash ( -1 ){}
fridge( std::string &c);
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2011, 12:05     вызвать конструктор
Посмотрите здесь:

Выделить память под несколько элементов + вызвать конструктор для каждого C++
как вызвать конструктор? C++
как привильно создать и вызвать конструктор для массив обьектов C++
C++ Не могу сделать чтобы класс содержал основной конструктор и конструктор копирования
C++ Как вызвать конструктор для неизвестного объекта?
Как вызвать конструктор по указателю? C++
Как вызвать конструктор с параметрами в конструкторе без параметров? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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,133
15.12.2011, 15:51     вызвать конструктор #4
Цитата Сообщение от Bers Посмотреть сообщение
И что "вызов конструктора" равносильно "создать объект"
Не совсем же. Вроде вы сами же говорили мне)
Bers
Заблокирован
15.12.2011, 16:09     вызвать конструктор #5
Цитата Сообщение от Chelioss Посмотреть сообщение
Не совсем же. Вроде вы сами же говорили мне)
Вот сюда глянь:

http://liveworkspace.org/code/821253...6afd22f7b033e6
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 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,133
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
Эксперт С++
9455 / 5468 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
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,133
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
Эксперт С++
9455 / 5468 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
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,133
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++
C++ Вызвать конструктор произвольного класса в другом классе
Не получается вызвать конструктор "деда" C++

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

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

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