Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Damir1990
1 / 1 / 0
Регистрация: 01.10.2011
Сообщений: 40
1

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

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

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

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

как вызвать конструктор?
class t_figure { protected: int m_hor; // цифра по горизонтали char...

Вызвать конструктор с одним аргументом
Есть класс с конструктором принимающим один аргумент типа T. Этим аргументом...

Как вызвать нужный конструктор
Пожалуйста, подскажите, как вызвать нужный конструктор в зависимости от того,...

Как вызвать конструктор по указателю?
TBase *Buffer; TBase *p; TBase *End; size_t NewSize; ...

Вызвать конструктор в поле класса
Хай class ac { public: int a; ac(int c) { a = c; } ac() {};

15
LosAngeles
Заблокирован
15.12.2011, 12:29 2
fridge();
0
Bers
Заблокирован
15.12.2011, 13:11 3
Цитата Сообщение от Damir1990 Посмотреть сообщение
как вызвать конструктор?
надеюсь, вы осознаете, что конструкторы вызываются автоматически при создании объекта?
И что "вызов конструктора" равносильно "создать объект" ?

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

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

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

http://liveworkspace.org/code/821253e0ccbeec970a6afd22f7b033e6
0
fasked
Эксперт С++
4982 / 2561 / 241
Регистрация: 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;
   }
}
0
Chelioss
181 / 181 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
15.12.2011, 17:56 7
Цитата Сообщение от Bers Посмотреть сообщение
Вот сюда глянь
Я о том, что поля объекта создаются и удаляются только 1 раз, а именно при первом создании объекта и в конце блока(локальный объект) или программы(глобальный). Хоть сто раз вызови конструктор и деструктор, поля объекта не будет создаваться и удаляться вновь.
Я в одной теме как раз спрашивал, почему можно вызывать конструктор и деструктор много раз.

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

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

Я его дополнил для случая запуска конструктора изнутри самого объекта. Эксперимент наглядно показывает, что невозможно запустить конструктор, не создавая объекта.
0
easybudda
Модератор
Эксперт CЭксперт С++
10115 / 6023 / 1510
Регистрация: 25.07.2009
Сообщений: 11,415
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 Посмотреть сообщение
здесь не просто будит
Это какая-то разновидность упёртости?

4
Bers
Заблокирован
15.12.2011, 20:16 10
C++
1
Hundred * h = new Hundred(i); //здесь типа объект не создаётся?
Добавлено через 3 минуты
Цитата Сообщение от easybudda Посмотреть сообщение
Это какая-то разновидность упёртости?
Это типа мне похрену, что лично ты об этом думаешь.
0
Chelioss
181 / 181 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
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");
}
0
easybudda
Модератор
Эксперт CЭксперт С++
10115 / 6023 / 1510
Регистрация: 25.07.2009
Сообщений: 11,415
15.12.2011, 20:21 12
Цитата Сообщение от Bers Посмотреть сообщение
здесь типа объект не создаётся?
Типа нет. Учи матчасть.

Цитата Сообщение от Bers Посмотреть сообщение
Это типа мне...
Приз выдан.
0
LosAngeles
Заблокирован
16.12.2011, 19:04 13
Chelioss, видимо это незадокументированная возможность visual studio, причём довольно тупая и бесполезная
0
Chelioss
181 / 181 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
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;
}
Может это плохо, а может нет, но выглядит очень просто и понятно.
Так же это лучше, чем копировать весь код с деструктора и конструктора копирования.
0
LosAngeles
Заблокирован
16.12.2011, 20:04 15
Цитата Сообщение от Chelioss Посмотреть сообщение
this->Department:epartment( depart );
new(this) Department(depart);


эта конструкция никому непонятна кроме тебя и непереносима, да и раз её нет в С++ то вобще глупо её обсуждать.
0
Chelioss
181 / 181 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
16.12.2011, 20:19 16
Цитата Сообщение от LosAngeles Посмотреть сообщение
эта конструкция никому непонятна кроме
Чего тут не понятного? Вы не знаете, что такое конструктор копирования?
0
16.12.2011, 20:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2011, 20:19

Вызвать конструктор произвольного класса в другом классе
Здравствуйте! Есть необходимость вызвать конструктор какого-либо класса в...

Как вызвать конструктор для неизвестного объекта?
Добрый вечер. Помогите мне с задачей. Хочу написать шаблонный класс вектор. ...

Как правильно вызвать конструктор вектора в данном случае?
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;map&gt; #include &lt;vector&gt;...


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

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

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