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

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

Войти
Регистрация
Восстановить пароль
 
saturn77
0 / 0 / 0
Регистрация: 07.12.2012
Сообщений: 8
#1

класс с конструктором как он тут работает? - C++

07.12.2012, 08:48. Просмотров 366. Ответов 8
Метки нет (Все метки)

Здравствуйте. Не могу понять как работает программа, помогите разобраться, пожалуйста.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# include<iostream>
using namespace std;
 
class MyClass
{
public:
MyClass( int capacity ): size( capacity + 5 ), extra( size + 5 )
{
std::cout << "size = " << size << '\n';
std::cout << "extra = " << extra << '\n';
}
 
int extra;
int size;
};
 
 
int main() {
MyClass m(10);
 
system("pause");
return 0;
}
Результат у меня такой: size=15 , extra= -858993455. Могу только предполагать, что конструктор наследует самого себя.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.12.2012, 08:48     класс с конструктором как он тут работает?
Посмотрите здесь:

C++ Код по алгоритму, приведенному тут:) Работает неверно
C++ Не пойму как работает класс
C++ Создать класс с двумя полями и конструктором
C++ Класс с Конструктором и Деструктором
Реализовать класс "записная книжка" с конструктором и деструктором C++
C++ Объясните пожалуйста как тут работает сортировка и что такое ostream_iterator<string>
как написать программу, к примеру, класс шаблон выводящая дин. массив любого типа, с конструктором и деструктором... C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
12728 / 7188 / 802
Регистрация: 27.09.2012
Сообщений: 17,729
Записей в блоге: 2
Завершенные тесты: 1
07.12.2012, 08:54     класс с конструктором как он тут работает? #2
так работает?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
using namespace std;
 
class MyClass
{
public:
MyClass( int capacity ): size(capacity+5),extra(size+5)
{
std::cout << "size = " << size << '\n';
std::cout << "extra = " << extra << '\n';
}
int size;
int extra;
};
saturn77
0 / 0 / 0
Регистрация: 07.12.2012
Сообщений: 8
07.12.2012, 10:14  [ТС]     класс с конструктором как он тут работает? #3
теперь поля 15 и 20,что изменилось?)) так это наследование идет?
Croessmah
Модератор
Эксперт CЭксперт С++
12728 / 7188 / 802
Регистрация: 27.09.2012
Сообщений: 17,729
Записей в блоге: 2
Завершенные тесты: 1
07.12.2012, 10:21     класс с конструктором как он тут работает? #4
Цитата Сообщение от saturn77 Посмотреть сообщение
так это наследование идет?
Всегда говорю, что не надо так инициализировать переменные в конструкторе.
C++
1
теперь поля 15 и 20,что изменилось?))
поменял
C++
1
2
int extra;
int size;
на:
C++
1
2
int size;
int extra;
saturn77
0 / 0 / 0
Регистрация: 07.12.2012
Сообщений: 8
07.12.2012, 10:29  [ТС]     класс с конструктором как он тут работает? #5
большое спасибо! подобной инициализации нигде не мог найти, у Страуструпа в книге даже не нашел(
silent_1991
Эксперт С++
4952 / 3028 / 149
Регистрация: 11.11.2009
Сообщений: 7,026
Завершенные тесты: 1
12.12.2012, 06:20     класс с конструктором как он тут работает? #6
Цитата Сообщение от saturn77 Посмотреть сообщение
подобной инициализации нигде не мог найти, у Страуструпа в книге даже не нашел(
Не верю. А если всё ещё интересно - гуглим про списки инициализации конструктора.

Добавлено через 1 минуту
Цитата Сообщение от Croessmah Посмотреть сообщение
Всегда говорю, что не надо так инициализировать переменные в конструкторе.
"Так" - это списком инициализации? Или когда значение одной основывается на значении другой? Если первое - прокомментируй. Если второе, то действительно не надо, однако знать, что порядок инициализации через список зависит от порядка объявления полей в классе, всё же надо. А, зная это, таких ошибок можно избежать.
MrGluck
Ворчун
Эксперт CЭксперт С++
6435 / 3633 / 452
Регистрация: 29.11.2010
Сообщений: 9,602
12.12.2012, 06:24     класс с конструктором как он тут работает? #7
Не, без списков инициализации конструктора никак - иначе как я буду конструкторы базовых классов вызывать и константы то инициализировать?)
Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
12.12.2012, 08:13     класс с конструктором как он тут работает? #8
Цитата Сообщение от MrGluck Посмотреть сообщение
Не, без списков инициализации конструктора никак
Ну хотя бы не делать так, как у автора. На момент инициализации extra в size лежит мусор.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.12.2012, 11:45     класс с конструктором как он тут работает?
Еще ссылки по теме:

C++ Есть тут кто работает с++ + intel xeon phi 5110p ?
Создайте производный класс с дополнительными полями, конструктором по умолчанию и методами чтения/изменения значений этих полей C++
Выдает ошибку,тут что не так? Простейший класс C++
C++ Программа не работает. Какая тут ошибка?
Программа не работает.Какая тут ошибка? C++

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

Или воспользуйтесь поиском по форуму:
saturn77
0 / 0 / 0
Регистрация: 07.12.2012
Сообщений: 8
12.12.2012, 11:45  [ТС]     класс с конструктором как он тут работает? #9
Цитата Сообщение от silent_1991 Посмотреть сообщение
Цитата Сообщение от saturn77 Посмотреть сообщение
подобной инициализации нигде не мог найти, у Страуструпа в книге даже не нашел(
Не верю. А если всё ещё интересно - гуглим про списки инициализации конструктора.
спасибо, нашел у Страуструпа, я ведь не в курсе был, что это называется - список инициализации)
Yandex
Объявления
12.12.2012, 11:45     класс с конструктором как он тут работает?
Ответ Создать тему
Опции темы

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