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

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

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

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

15.12.2011, 12:05. Просмотров 1443. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос вызвать конструктор (C++):

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

Вызвать конструктор с одним аргументом - C++
Есть класс с конструктором принимающим один аргумент типа T. Этим аргументом должно быть значение T по умолчанию, то есть T(). Однако,...

Как вызвать конструктор по указателю? - C++
TBase *Buffer; TBase *p; TBase *End; size_t NewSize; NewSize=Count*sizeof(TBase); if ((NewSize/sizeof(TBase))==Count) ...

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

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

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

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

http://liveworkspace.org/code/821253e0ccbeec970a6afd22f7b033e6
0
fasked
Эксперт С++
4945 / 2525 / 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;
   }
}
0
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
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Эксперт С++
9683 / 5633 / 956
Регистрация: 25.07.2009
Сообщений: 10,811
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
180 / 180 / 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");
}
0
easybudda
Модератор
Эксперт CЭксперт С++
9683 / 5633 / 956
Регистрация: 25.07.2009
Сообщений: 10,811
15.12.2011, 20:21 #12
Цитата Сообщение от Bers Посмотреть сообщение
здесь типа объект не создаётся?
Типа нет. Учи матчасть.

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


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

Вызвать конструктор произвольного класса в другом классе - C++
Здравствуйте! Есть необходимость вызвать конструктор какого-либо класса в методе другого класса. Примерно так: class A{}; class B:...

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

Как вызвать конструктор с параметрами в конструкторе без параметров? - C++
Как вызвать конструктор с параметрами в конструкторе без параметров? То есть что бы конструктор с параметрами выступал в роли основного. В...

Как правильно создать и вызвать конструктор для массива объектов? - C++
Сам класс class Planet{ public: string name; protected: double diameter; private: int sputniks, number, distance; public: ...


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

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

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