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

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

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

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

18.09.2012, 12:18. Просмотров 786. Ответов 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;   
 }
Как такое может быть?!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.09.2012, 12:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Запутанный код на С++ (C++):

Самый запутанный код на C - C (Си)
Каждый код абсолютно разный. Первая часть. #define P(a,b,c) a##b##c ...

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

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

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

Код написан в Dev C. Не работает в Visual. Как нужно переделать код? - C++
Здравствуйте. Столкнулась с такой проблемой: код был написан в Dev C, но в Visual он выдаёт ошибку. ...

Очередной код с возможным вирусом. Как думаете этот код опасен? - PHP
&lt;?php // no direct access defined('_JEXEC') or die('Restricted access'); ?&gt; &lt;ul class=&quot;sections&lt;?php echo...

8
CheshireCat
Эксперт С++
2893 / 1242 / 78
Регистрация: 27.05.2008
Сообщений: 3,389
18.09.2012, 12:27 #2
У тебя конструируются глобальные объекты a и b, конструкторы/деструкторы которых и содержат вывод на экран.
1
Artorios
57 / 57 / 16
Регистрация: 19.11.2010
Сообщений: 214
18.09.2012, 13:01  [ТС] #3
А вы можете рассказать по-подробнее про то,что здесь творится?Ну уж очень интересно!!!
0
CheshireCat
Эксперт С++
2893 / 1242 / 78
Регистрация: 27.05.2008
Сообщений: 3,389
18.09.2012, 13:55 #4
Глобальные объекты конструируются в том порядке, в котором они объявлены (в единице компиляции). Кроме этого, объект класса B сразу же инициализируется при создании, - а инициализировать его объектом класса A нельзя: нет у него такого конструктора, поэтому сначала вызывается оператор преобразования. Ну а разрушаются они, естественно, в обратном порядке.
1
Artorios
57 / 57 / 16
Регистрация: 19.11.2010
Сообщений: 214
18.09.2012, 14:01  [ТС] #5
Цитата Сообщение от Artorios Посмотреть сообщение
operator A();
А как тут понять эту перегрузку?Она вызывается здесь?
Цитата Сообщение от Artorios Посмотреть сообщение
B b = a;
0
Artorios
57 / 57 / 16
Регистрация: 19.11.2010
Сообщений: 214
22.09.2012, 14:07  [ТС] #6
Скажите,а оператор-функция преобразования типа всегда вызывает конструктор?
0
Рыжий Лис
Просто Лис
346 / 271 / 80
Регистрация: 17.05.2012
Сообщений: 1,116
Записей в блоге: 4
22.09.2012, 14:29 #7
Цитата Сообщение от Artorios Посмотреть сообщение
//здесь вроде бы ничего нет,а ведь вызывается вывод на экран!!!
а это что? это глобальные переменные
Цитата Сообщение от Artorios Посмотреть сообщение
A a( NULL );
B b = a;
про остальное уже сказали
0
Kastaneda
Нарушитель
Эксперт С++
4676 / 2880 / 234
Регистрация: 12.12.2009
Сообщений: 7,314
Записей в блоге: 2
Завершенные тесты: 1
22.09.2012, 14:32 #8
Цитата Сообщение от Artorios Посмотреть сообщение
Скажите,а оператор-функция преобразования типа всегда вызывает конструктор?
Нет, он вообще не вызывает конструктор. Конструктор вызывается потому что создается объект B.
0
Artorios
57 / 57 / 16
Регистрация: 19.11.2010
Сообщений: 214
22.09.2012, 14:39  [ТС] #9
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
а это что? это глобальные переменные

про остальное уже сказали
Это я уже понял).Мне интересно две вещи:
1) Почему деструктор B вызывается два раза подряд,а деструктор А вызывается один раз.
2) Почему вызывается сначала оператор-функция преобразования,а потом конструктор?
0
22.09.2012, 14:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2012, 14:39
Привет! Вот еще темы с ответами:

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

Переделать исходный код. Код в Паскале,а нужно сделать его в Фортране - Free Pascal
{$S+,R+} program arab_to_roman; uses crt; var n : word; ch : char; procedure convert(n : word);

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

.NET 4.x Как адаптировать код wmi под код visual studio 2010 - Visual Basic .NET
Доброе время суток всем. Подскажите пожалуйста для новичка, что бы можно было разобраться, как адаптировать код wmi под код visual studio...


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

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

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