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

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

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

Инициализация членов в объявлении класса - C++

04.02.2016, 07:54. Просмотров 394. Ответов 6
Метки нет (Все метки)

В классе:
C++
1
2
3
4
5
6
7
8
class peltier
{
public:
    material p = material('p');
    material n = material('n');
    peltier();
    ~peltier(void);
};
инициализируются два экземпляра класса с помощью параметризированного конструктора (конструктор по умолчанию отсутствует):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class material
{
    float a[4];
    float s[4];
    float k[4];
    float z[4];
public:
    material(char t);
    float polynomial(float p[], float t);
    float sigma(float temp);
    float sigma(float tcold, float thot);
    float alpha(float temp);
    float alpha(float tcold, float thot);
    float kappa(float temp);
    float kappa(float tcold, float thot);
    float Z(float temp);
    float Z(float tcold, float thot);
    ~material(void);
};
В конструкторе и деструкторе выводится сообщение о создании и разрушении объекта.
При выполнении данного кода:
C++
1
2
3
4
5
6
7
8
9
10
11
peltier mod;
    cout << "\nSigma p: " << mod.p.sigma(300) << "\t" << mod.p.sigma(325, 475);
    cout << "\nSigma n: " << mod.n.sigma(300) << "\t" << mod.n.sigma(325, 475);
    cout << "\nAlpha p: " << mod.p.alpha(300) << "\t" << mod.p.alpha(325, 475);
    cout << "\nAlpha n: " << mod.n.alpha(300) << "\t" << mod.n.alpha(325, 475);
    cout << "\nKappa p: " << mod.p.kappa(300) << "\t" << mod.p.kappa(325, 475);
    cout << "\nKappa n: " << mod.n.kappa(300) << "\t" << mod.n.kappa(325, 475);
    cout << "\nZp: " << mod.p.Z(300) << "\t" << mod.p.Z(325, 475);
    cout << "\nZn: " << mod.n.Z(300) << "\t" << mod.n.Z(325, 475) << endl;
    cout << "\nFor thot = 27C: deltaT = " << deltaT(300.f);
    cout << "\nFor thot = 50C: deltaT = " << deltaT(323.f) << endl;
получаю вывод:

p-type material is constructed!
p-type material is constructed!
p-type material is constructed!
p-type material is constructed!
n-type material is constructed!
n-type material is constructed!
n-type material is constructed!
n-type material is constructed!
Sigma p: 1785.06 1223.67
Sigma n: 1353.83 957.71
Alpha p: 159.709 186.921
Alpha n: 188.953 181.451
Kappa p: 1.63412 1.78137
Kappa n: 2.04664 2.27879
Zp: 2.8044 2.39947
Zn: 2.42295 1.46145

For thot = 27C: deltaT = 66.2841
For thot = 50C: deltaT = 75.6507

Почему материал создается четыре раза и ни один раз не разрушается? Что это за копии объектов и как они хранятся? С каким объектом работает программа и при каком условии будут удалены "лишние копии"?

И почему нельзя инициализировать:
C++
1
2
material p('p');
material n('n');
а нужно:
C++
1
2
material p = material('p');
material n = material('n');
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.02.2016, 07:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Инициализация членов в объявлении класса (C++):

Инициализация в объявлении константных статических (const static) членов-данных класса. - C++
Привет. Подскажите пожалуйста почему нельзя создавать в классе const static float, а const static int можно? class A{ const...

Создать класс CheckerBoard (особенности строения класса - инициализация константных членов класса) - C++
Вот код: #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; const int xSize = 1; const int ySize = 1; class...

Инициализация членов дочернего класса членами класса родителя - C++
Есть уже созданный класс-родитель A. Как эффективно инициализировать дочерний класс B членами класса A?

Инициализация статических членов класса - C++
Непонятно, почему статические члены класса нельзя инициализировать при помощи вот такого синтаксиса: static int const...

Инициализация членов класса нулями - C++
Необходимо инициализировать члены класса нулями. class ID { public: int GetKey() { return key; } private: int id, key, qm; ...

Инициализация массива при объявлении - C++
Здравствуйте Маленький вопросик как проинициализировать массив при определении? template &lt;class T&gt; class myClass { private:...

6
SatanaXIII
Супер-модератор
Эксперт С++
5618 / 2653 / 246
Регистрация: 01.11.2011
Сообщений: 6,549
Завершенные тесты: 1
04.02.2016, 10:41 #2
vigord, а что за дивный компилятор у вас?
0
vigord
0 / 0 / 0
Регистрация: 18.11.2015
Сообщений: 16
04.02.2016, 21:35  [ТС] #3
У меня Microsoft Visual Studio 2015. Все компилируется и все работает в приведенном выше виде. Но, хотелось бы понимать, что к чему.
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
04.02.2016, 23:23 #4
vigord, Для данного кода вывод очень странный. Не верю (с).
Для инициализации в классе можно использовать фигурные скобки
C++
1
material p{'p'};
Вот пример нормального вывода: Пример
0
DrOffset
04.02.2016, 23:28
  #5

Не по теме:

Цитата Сообщение от ForEveR Посмотреть сообщение
Не верю (с).
Возможно ТС просто забыл залогировать деструктор?

0
ForEveR
04.02.2016, 23:32
  #6

Не по теме:

DrOffset, Ну от того кода который привели 4 раза объект не сконструируется. Если конечно трейс не в конструкторе копии/мува, но и там 4 не наберется.

0
DrOffset
04.02.2016, 23:37     Инициализация членов в объявлении класса
  #7

Не по теме:

ForEveR, да. тем более в коде эти конструкторы не фигурируют.

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

Инициализация вектора значениями при объявлении - C++
Добрый день! Изучаю c++, сейчас разбираюсь с векторами. дошел до конструктора vector::vector(input_iterator start, input_iterator...

Инициализация при объявлении и перегрузка operator= - C++
Предположим, у меня есть класс, например, такого состава: class CharInt { public: char chA; int intB; };Путём...

BST дерево. Инициализация класса внутри класса - C++
Здравствуйте, нужно реализовать класс дерева бинарного поиска с использованием итератора. Возник вопрос, как инициализировать через...

Инициализация объектов класса в конструкторе другого класса - C++
У меня есть класс Subscriber,в котором есть несколько объектов другого класса Date,мне нужно,чтобы при создании Subscriber объекты класса...


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

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

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