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

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

Восстановить пароль Регистрация
 
vigord
0 / 0 / 0
Регистрация: 18.11.2015
Сообщений: 13
04.02.2016, 07:54     Инициализация членов в объявлении класса #1
В классе:
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');
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5549 / 2563 / 233
Регистрация: 01.11.2011
Сообщений: 6,334
Завершенные тесты: 1
04.02.2016, 10:41     Инициализация членов в объявлении класса #2
vigord, а что за дивный компилятор у вас?
vigord
0 / 0 / 0
Регистрация: 18.11.2015
Сообщений: 13
04.02.2016, 21:35  [ТС]     Инициализация членов в объявлении класса #3
У меня Microsoft Visual Studio 2015. Все компилируется и все работает в приведенном выше виде. Но, хотелось бы понимать, что к чему.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
04.02.2016, 23:23     Инициализация членов в объявлении класса #4
vigord, Для данного кода вывод очень странный. Не верю (с).
Для инициализации в классе можно использовать фигурные скобки
C++
1
material p{'p'};
Вот пример нормального вывода: Пример
DrOffset
04.02.2016, 23:28
  #5

Не по теме:

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

ForEveR
04.02.2016, 23:32
  #6

Не по теме:

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

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

Не по теме:

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

Yandex
Объявления
04.02.2016, 23:37     Инициализация членов в объявлении класса
Ответ Создать тему
Опции темы

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