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

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

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

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

18.09.2012, 12:18. Просмотров 745. Ответов 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 - C (Си)
Каждый код абсолютно разный. Первая часть. #define P(a,b,c) a##b##c ...

Запутанный Лог Оо - Сетевое оборудование
Привет ребята! Помогите пожалуйста разобраться в логе RootRouterPlus. Прога опрашивает маршрутизаторы, к которым привязаны счетчики. Вот...

запутанный момент - Lisp
sicp Упражнение 1.15. Синус угла (заданного в радианах) можно вычислить, если воспользоваться приближением sin x ≈ x при малых x и...

HP Elitebook 2570p, запутанный диагноз - Ремонт ноутбуков
Уронил ноутбук в конце октября и матрица ноутбука фактически разбита в дребезги (на нем след как будто сильно ударили кулаком). Включаю...

Надо написать код программы (код есть оформить в маткад не могу_ - MathCAD
Видео файл меньше весит чем картинка :D Вот этот код If r1=X0 then g4(r1)=... Как его записать чтобы маткад его воспринял ?

При нажатии на button выполнить свой код + код другого баттона - Delphi
Как?

Поправьте код пож-та! код выводит комментарии с превью поста! - WordPress
Вот есть такой код, который добавлен в функции и выводит в виджете комментарии с превью поста! Код работает но не совсем то что мне...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,353
18.09.2012, 12:27     Запутанный код на С++ #2
У тебя конструируются глобальные объекты a и b, конструкторы/деструкторы которых и содержат вывод на экран.
Artorios
57 / 57 / 16
Регистрация: 19.11.2010
Сообщений: 214
18.09.2012, 13:01  [ТС]     Запутанный код на С++ #3
А вы можете рассказать по-подробнее про то,что здесь творится?Ну уж очень интересно!!!
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,353
18.09.2012, 13:55     Запутанный код на С++ #4
Глобальные объекты конструируются в том порядке, в котором они объявлены (в единице компиляции). Кроме этого, объект класса B сразу же инициализируется при создании, - а инициализировать его объектом класса A нельзя: нет у него такого конструктора, поэтому сначала вызывается оператор преобразования. Ну а разрушаются они, естественно, в обратном порядке.
Artorios
57 / 57 / 16
Регистрация: 19.11.2010
Сообщений: 214
18.09.2012, 14:01  [ТС]     Запутанный код на С++ #5
Цитата Сообщение от Artorios Посмотреть сообщение
operator A();
А как тут понять эту перегрузку?Она вызывается здесь?
Цитата Сообщение от Artorios Посмотреть сообщение
B b = a;
Artorios
57 / 57 / 16
Регистрация: 19.11.2010
Сообщений: 214
22.09.2012, 14:07  [ТС]     Запутанный код на С++ #6
Скажите,а оператор-функция преобразования типа всегда вызывает конструктор?
Рыжий Лис
Просто Лис
250 / 205 / 54
Регистрация: 17.05.2012
Сообщений: 813
Записей в блоге: 4
22.09.2012, 14:29     Запутанный код на С++ #7
Цитата Сообщение от Artorios Посмотреть сообщение
//здесь вроде бы ничего нет,а ведь вызывается вывод на экран!!!
а это что? это глобальные переменные
Цитата Сообщение от Artorios Посмотреть сообщение
A a( NULL );
B b = a;
про остальное уже сказали
Kastaneda
Форумчанин
Эксперт С++
4479 / 2841 / 227
Регистрация: 12.12.2009
Сообщений: 7,224
Записей в блоге: 1
Завершенные тесты: 1
22.09.2012, 14:32     Запутанный код на С++ #8
Цитата Сообщение от Artorios Посмотреть сообщение
Скажите,а оператор-функция преобразования типа всегда вызывает конструктор?
Нет, он вообще не вызывает конструктор. Конструктор вызывается потому что создается объект B.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2012, 14:39     Запутанный код на С++
Еще ссылки по теме:

Переведите, пожалуйста код с Паскаля на QBasic и отредактируйте код под условие задачи - QBasic
Ниже расположено условие задачи. Даны натуральное число m, целые числа {a}_{l},...,{a}_{lm} и целочисленная квадратная матрица порядка m....

уникальный код для входа на опрос. код действителен только один раз - PHP БД
Привет всем! возникла проблема типа &quot;как воплотить в жизнь&quot; в php. Сценарий такой: 600 человек получают уникальный код для входа на...

Разбираю код одной темы, что означает следующий код и зачем он нужен? - WordPress
Доброго времени суток всем. Скачал тут как-то на днях вот такую тему для wordpress и смотрю, разбираю, что там внутри и как это работает. ...

Как совместить существующий код в htaccess и код для редиректа 301 домена? - Apache
Делаю редирект со старого домена на новый. Применяю следующий код для редиректа Options +FollowSymLinks RewriteEngine On ...


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

Или воспользуйтесь поиском по форуму:
Artorios
57 / 57 / 16
Регистрация: 19.11.2010
Сообщений: 214
22.09.2012, 14:39  [ТС]     Запутанный код на С++ #9
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
а это что? это глобальные переменные

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

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