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

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

Войти
Регистрация
Восстановить пароль
 
Artorios
55 / 55 / 16
Регистрация: 19.11.2010
Сообщений: 212
#1

Запутанный код на С++ - C++

18.09.2012, 12:18. Просмотров 716. Ответов 8
Метки нет (Все метки)

Здравствуйте уважаемые программисты!Помогите,пожалуйста разобрать запутанный с++ код.
C++ (Qt)
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
 #include "stdafx.h"   
 #include <stdio.h>   
 #include <conio.h>   
 #include <iostream>   
 using namespace std;   
  
 class    MAIN{};   
 class    B;   
  
 class    A   
 {   
   MAIN *PTR;   
    public:   
   A( MAIN * )   
   {   
    cout<<"A( MAIN * )"<<endl;   
   }   
   operator B();   
   ~A()   
   {   
    cout<<"~A"<<endl;   
   }   
 };   
  
 class    B   
 {   
   friend A;   
   B( MAIN * )   
   {   
    cout<<"B( MAIN * )"<<endl;   
   };   
 public:   
   operator A();   
   ~B()   
   {   
    cout<<"~B"<<endl;   
   }   
 };   
  
 A::operator B()   
 {   
   cout<<"A::operator B()"<<endl;   
   return(NULL);   
 }   
 B::operator A()   
 {   
   cout<<"B::operator A()"<<endl;   
   return(NULL);   
 }   
  
 A a( NULL );   
 B b = a;   
  
 int _tmain(int argc, _TCHAR* argv[]){   
   getch();   //здесь вроде бы ничего нет,а ведь вызывается вывод на экран!!!
   return 0;   
 }
Как такое может быть?!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.09.2012, 12:18     Запутанный код на С++
Посмотрите здесь:

C++ В чем разница между exit(код возврата) и ExitProcess (код возврата)?
C++ Не получается запустить длинный код Алгоритма Гомори, код правильный.
код, который прекрасно выполняет Code::Blocks не выполняеться в Студии, как сделатьь так чтобы Студия воспринимала этот код?? C++
Пытаюсь переписать код с циклом for, в код с циклом while, но не совсем получается C++
Нужно засунуть код инструкции в 4 char'a так, чтобы в памяти это был код инструкции. C++
перевести код на С++ или написать свой код C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CheshireCat
Эксперт С++
2891 / 1240 / 78
Регистрация: 27.05.2008
Сообщений: 3,328
18.09.2012, 12:27     Запутанный код на С++ #2
У тебя конструируются глобальные объекты a и b, конструкторы/деструкторы которых и содержат вывод на экран.
Artorios
55 / 55 / 16
Регистрация: 19.11.2010
Сообщений: 212
18.09.2012, 13:01  [ТС]     Запутанный код на С++ #3
А вы можете рассказать по-подробнее про то,что здесь творится?Ну уж очень интересно!!!
CheshireCat
Эксперт С++
2891 / 1240 / 78
Регистрация: 27.05.2008
Сообщений: 3,328
18.09.2012, 13:55     Запутанный код на С++ #4
Глобальные объекты конструируются в том порядке, в котором они объявлены (в единице компиляции). Кроме этого, объект класса B сразу же инициализируется при создании, - а инициализировать его объектом класса A нельзя: нет у него такого конструктора, поэтому сначала вызывается оператор преобразования. Ну а разрушаются они, естественно, в обратном порядке.
Artorios
55 / 55 / 16
Регистрация: 19.11.2010
Сообщений: 212
18.09.2012, 14:01  [ТС]     Запутанный код на С++ #5
Цитата Сообщение от Artorios Посмотреть сообщение
operator A();
А как тут понять эту перегрузку?Она вызывается здесь?
Цитата Сообщение от Artorios Посмотреть сообщение
B b = a;
Artorios
55 / 55 / 16
Регистрация: 19.11.2010
Сообщений: 212
22.09.2012, 14:07  [ТС]     Запутанный код на С++ #6
Скажите,а оператор-функция преобразования типа всегда вызывает конструктор?
Рыжий Лис
Просто Лис
217 / 172 / 46
Регистрация: 17.05.2012
Сообщений: 631
Записей в блоге: 4
22.09.2012, 14:29     Запутанный код на С++ #7
Цитата Сообщение от Artorios Посмотреть сообщение
//здесь вроде бы ничего нет,а ведь вызывается вывод на экран!!!
а это что? это глобальные переменные
Цитата Сообщение от Artorios Посмотреть сообщение
A a( NULL );
B b = a;
про остальное уже сказали
Kastaneda
Форумчанин
Эксперт С++
4263 / 2795 / 219
Регистрация: 12.12.2009
Сообщений: 7,122
Записей в блоге: 1
Завершенные тесты: 1
22.09.2012, 14:32     Запутанный код на С++ #8
Цитата Сообщение от Artorios Посмотреть сообщение
Скажите,а оператор-функция преобразования типа всегда вызывает конструктор?
Нет, он вообще не вызывает конструктор. Конструктор вызывается потому что создается объект B.
Artorios
55 / 55 / 16
Регистрация: 19.11.2010
Сообщений: 212
22.09.2012, 14:39  [ТС]     Запутанный код на С++ #9
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
а это что? это глобальные переменные

про остальное уже сказали
Это я уже понял).Мне интересно две вещи:
1) Почему деструктор B вызывается два раза подряд,а деструктор А вызывается один раз.
2) Почему вызывается сначала оператор-функция преобразования,а потом конструктор?
Yandex
Объявления
22.09.2012, 14:39     Запутанный код на С++
Ответ Создать тему
Опции темы

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