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

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

Войти
Регистрация
Восстановить пароль
 
daslex
1271 / 515 / 106
Регистрация: 02.08.2011
Сообщений: 2,706
#1

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

24.04.2012, 15:03. Просмотров 632. Ответов 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

Почему так?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.04.2012, 15:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Конструктор класса (C++):

Конструктор класса не видит конструктор по умолчанию другого класса - C++
Ошибка, естественно, в Classes.cpp, в строке 20. Ругается, что у класса TailNode нет конструктора по умолчанию, хотя он там, конечно, есть....

Конструктор производного класса требует конструктор предка - C++
Выдаёт вот такую вот ошибку: no matching function for call to 'Cube::Cube()' class Cube { protected: int magInt; bool...

Пример класса с конструктором и деструктором, создание экземпляра класса через конструктор с параметрами - C++
Привести пример класса с конструктором и деструктором, созданием экземпляра класса с помощью конструктора с параметрами.

Создать конструктор копий и оператор присваивания для класса компьютер и члена класса марка - C++
Создать конструктор копий и оператор присваивания для класса компьютер и члена класса марка. Всем огромное спасибо за помощь! |

В конструктор класса передать объект этого класса - C++
Вопрос на засыпку :) Как в конструктор класса передать объект этого класса? Т.е. class A { public: A(const char* s){} ...

Конструктор класса с инициализацией другого класса - C++
error C2064: term does not evaluate to a function taking 6 arguments Так же при наведении на SStria(...); Пишет: call of an object of...

13
extenup
54 / 54 / 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;
}
0
daslex
1271 / 515 / 106
Регистрация: 02.08.2011
Сообщений: 2,706
24.04.2012, 15:45  [ТС] #3
Я не говорил что неправильно работает.

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

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

Ответа я не получил. Вопрос думаю написал понятно. Поэтому хотелось бы чтоб кто-то пояснил этот момент
0
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,386
Завершенные тесты: 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. Это решения не самое лучшее, но если вы только изучаете, то на первое время пойдет.
0
daslex
1271 / 515 / 106
Регистрация: 02.08.2011
Сообщений: 2,706
24.04.2012, 16:25  [ТС] #7
system("cls") я пробовал до вопроса сюда. эфффект тот же
0
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,386
Завершенные тесты: 1
24.04.2012, 16:49 #8
Так правильно, Вы вызываете очистку экрана перед созданием объектов. Поместите строчку очистки перед getch.
0
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
24.04.2012, 16:53 #9
Цитата Сообщение от Toshkarik Посмотреть сообщение
Так правильно, Вы вызываете очистку экрана перед созданием объектов.
Объекты конструируются до входа в main.
А в чем странность поведения, я так и не понял.
0
Toshkarik
24.04.2012, 17:00
  #10

Не по теме:

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

1
daslex
1271 / 515 / 106
Регистрация: 02.08.2011
Сообщений: 2,706
24.04.2012, 17:07  [ТС] #11
Toshkarik, и пусть никто вообще ниче не видит


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

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

Уберите obj2 и выполните программу более 3-х раз, думаю понятнее должно стать в чем у меня вопрос
0
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
24.04.2012, 17:13 #12
Насколько я понял, у вас какой-то доисторический компилятор, скорее всего борланд,в котором остаются значения со старых запусков программ. Тогда все логично получается:
При самом первом запуске сначала вводятся 2 числа, затем очищается экран, затем эти числа выводятся.
При втором запуске эти числа остаются в консоли, ибо их не стерли, конструируются объекты, и уже затем чистится экран.
1
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,386
Завершенные тесты: 1
24.04.2012, 17:18 #13
Я просто мельком глянул, не видел что в main лишь вызываются элемент-функции. А так, скомпилировал у себя на GCC, только вместо clrscr написал system( "cls" ). Все выводится верно.
0
daslex
1271 / 515 / 106
Регистрация: 02.08.2011
Сообщений: 2,706
24.04.2012, 17:20  [ТС] #14
Toshkarik, Вы были очень близки к истинне. Только не перед getch(), а после getch() до return

Все понял
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.04.2012, 17:20
Привет! Вот еще темы с ответами:

Конструктор класса - C++
Интересно, а может ли быть конструктор класса не публичнымм, а приватным?

Конструктор класса - C++
class NMClient{ public: NMClient(string IPServer, int Port); NMClient(string IPServer, int Port) { /*_Running =...

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

Конструктор класса - C++
class A{}; class B : public A { B(); }; B::B() : A() /// ДЛЯ ЧЕГО ТУТ :A() И ЧТО ЭТО ОЗНАЧАЕТ??? { }


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

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

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