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

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

Войти
Регистрация
Восстановить пароль
 
daslex
1255 / 500 / 102
Регистрация: 02.08.2011
Сообщений: 2,509
#1

Конструктор класса - C++

24.04.2012, 15:03. Просмотров 614. Ответов 13
Метки нет (Все метки)

Пишу конструкцию

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
25
26
#include <iostream.h>
#include <conio.h>
 
 class MyClass
  {
    int a;
    public:
     void Show()
     {
      cout<<a;
     }
  MyClass()
  {
    cout<<"Wwedi a:   ";
    cin>>a;
  }
  } obj1,obj2;
 
void main()
{
 clrscr();
  obj1.Show();
  obj2.Show();
 getch();
 return;
}
Вот вопрос возникает в том, что очистка экрана происходит непонятно. При компиляции программы и запуске функции main сначала выводится значение предыдущего значения a и только после этого выполняется запрос на ввод a

Почему так?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
extenup
53 / 53 / 3
Регистрация: 12.11.2011
Сообщений: 109
24.04.2012, 15:32     Конструктор класса #2
Всё работает правильно.. Зачем тебе чистить окно?

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
25
26
27
28
29
#include <iostream>
#include <conio.h>
using namespace std;
 
 class MyClass
 {
 private:
    int a;
 
 public:
    void Show()
    {
        cout<<a;
    }
    MyClass()
    {
        cout<<"Wwedi a:   ";
        cin>>a;
    }
 } obj1, obj2;
 
int main(int argc, char *argv[])
{
    obj1.Show();
    obj2.Show();
 
    getch();
    return 0;
}
daslex
1255 / 500 / 102
Регистрация: 02.08.2011
Сообщений: 2,509
24.04.2012, 15:45  [ТС]     Конструктор класса #3
Я не говорил что неправильно работает.

extenup, а зачем вам параметры в main?

Мне интересно почему работает не так как я предполагал. Очистка окна выполняется достаточно часто. Но в указанном варианте создается ощущение, что после полной очистки вызывается какая-то стороняя функция, которая отображает последствия предыдущей работы. Причем эту стороннюю функцию я не звал
extenup
53 / 53 / 3
Регистрация: 12.11.2011
Сообщений: 109
24.04.2012, 15:53     Конструктор класса #4
Параметры в main это просто привычка. Туда передаются параметры из командной строки. По умолчанию туда передаётся полный путь к исполняемому файлу (можно посмотреть в argv[0])
daslex
1255 / 500 / 102
Регистрация: 02.08.2011
Сообщений: 2,509
24.04.2012, 16:00  [ТС]     Конструктор класса #5
Вот и будем считать, что моя привычка чистить окно
А теперь вернемся к вопросу.

Ответа я не получил. Вопрос думаю написал понятно. Поэтому хотелось бы чтоб кто-то пояснил этот момент
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,383
Завершенные тесты: 1
24.04.2012, 16:09     Конструктор класса #6
clrscr не стандартная функция, и кто знает как она реализована. Пробуйте
C++
1
2
#include <stdlib.h>
system( "cls" );
если под win пишите, или
C++
1
2
#include <stdlib.h>
system( "clear" );
если под nix. Это решения не самое лучшее, но если вы только изучаете, то на первое время пойдет.
daslex
1255 / 500 / 102
Регистрация: 02.08.2011
Сообщений: 2,509
24.04.2012, 16:25  [ТС]     Конструктор класса #7
system("cls") я пробовал до вопроса сюда. эфффект тот же
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,383
Завершенные тесты: 1
24.04.2012, 16:49     Конструктор класса #8
Так правильно, Вы вызываете очистку экрана перед созданием объектов. Поместите строчку очистки перед getch.
diagon
Higher
1921 / 1187 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
24.04.2012, 16:53     Конструктор класса #9
Цитата Сообщение от Toshkarik Посмотреть сообщение
Так правильно, Вы вызываете очистку экрана перед созданием объектов.
Объекты конструируются до входа в main.
А в чем странность поведения, я так и не понял.
Toshkarik
24.04.2012, 17:00
  #10

Не по теме:

Ах да, не заметил...

daslex
1255 / 500 / 102
Регистрация: 02.08.2011
Сообщений: 2,509
24.04.2012, 17:07  [ТС]     Конструктор класса #11
Toshkarik, и пусть никто вообще ниче не видит


diagon, странность в том, что если так, то выходит что сначала каким-то образом конструируется объект прошлого выполнения, причем игнорируя конструктор, а после этого выполняет повторную попытку своего конструирования, причем на этот раз верную

Я понимаю, что это совершенно неверное утверждение, но по вашему объяснению при включении логического понимания всей цепочки выходит именно так

Уберите obj2 и выполните программу более 3-х раз, думаю понятнее должно стать в чем у меня вопрос
diagon
Higher
1921 / 1187 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
24.04.2012, 17:13     Конструктор класса #12
Насколько я понял, у вас какой-то доисторический компилятор, скорее всего борланд,в котором остаются значения со старых запусков программ. Тогда все логично получается:
При самом первом запуске сначала вводятся 2 числа, затем очищается экран, затем эти числа выводятся.
При втором запуске эти числа остаются в консоли, ибо их не стерли, конструируются объекты, и уже затем чистится экран.
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,383
Завершенные тесты: 1
24.04.2012, 17:18     Конструктор класса #13
Я просто мельком глянул, не видел что в main лишь вызываются элемент-функции. А так, скомпилировал у себя на GCC, только вместо clrscr написал system( "cls" ). Все выводится верно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.04.2012, 17:20     Конструктор класса
Еще ссылки по теме:

Конструктор класса не видит конструктор по умолчанию другого класса C++
Конструктор класса C++
Конструктор класса C++
C++ Пример класса с конструктором и деструктором, создание экземпляра класса через конструктор с параметрами
Конструктор класса с инициализацией другого класса C++

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

Или воспользуйтесь поиском по форуму:
daslex
1255 / 500 / 102
Регистрация: 02.08.2011
Сообщений: 2,509
24.04.2012, 17:20  [ТС]     Конструктор класса #14
Toshkarik, Вы были очень близки к истинне. Только не перед getch(), а после getch() до return

Все понял
Yandex
Объявления
24.04.2012, 17:20     Конструктор класса
Ответ Создать тему
Опции темы

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