Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 07.08.2017
Сообщений: 1
1

Неясность в работе с классами

07.08.2017, 22:05. Показов 566. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Столкнулся с проблемой, в которой не могу разобраться, а найти что-то не знаю как. Надеюсь кто-то объяснит в чем дело. Пример кода ниже (совершенно абстрактный)

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <iostream>
#include <conio.h>
 
using namespace std;
 
class Smth
{
public:
    int abc;
 
    Smth(int buff)
    {
        abc = buff + 1;
    }
 
    void Smth::GetABC()
    {
        cout << abc << endl;
    }
};
 
 
class TestClass
{
public:
    int a;
    Smth* smth1;
 
    TestClass(int b): a(0)
    {
        if(b > 0)
            a = 20;
    }
 
    void TestClass::GetA()
    {
        cout << a << endl;
 
        Smth smth2(a);
        smth1 = &smth2;
        
        smth1->GetABC();
    }
 
    void TestClass::GetB()
    {
        smth1->GetABC();
    }
};
 
 
int main()
{
    TestClass test1(8);
 
    test1.GetA();
    test1.GetB();
 
 
    _getch();
    return 0;
}
В результате я получу на выходе ответы: 20 21 -858993460. Так вот почему же 3 число такое, т.к мной ожидается в данном случае число 21? И как в таком случае это исправить?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.08.2017, 22:05
Ответы с готовыми решениями:

Ошибка в работе с классами
День добрый. Прошу помощи в решении такой проблеммы. Есть несколько классов и при компиляции...

Утечка памяти в работе с классами
вроде утечка памяти наблюдается в функции &quot;loadfromfile&quot;, помогите пожалуйста исправить ...

Ошибки при работе с классами
Создать объекты класса &lt;имя класса&gt; (класс и его поля задаются в соответствии с выбранным вариантом...

Ошибка при работе с классами
Выдаёт ошибки: 1) expected primary-expression before &quot; #include &lt;iostream&gt; #include &lt;iomanip&gt;...

2
2 / 2 / 0
Регистрация: 22.09.2016
Сообщений: 24
07.08.2017, 22:18 2
В функции getA() smth2 - локальный объект, он уничтожится при выходе из getA() и в функции getB() указатель smth1 уже будет указывать на "мусор".
0
2276 / 1767 / 741
Регистрация: 27.07.2012
Сообщений: 5,250
07.08.2017, 22:23 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void TestClass::GetA()
* * {
* * * * cout << a << endl;
 
        Smth smth2(a); // это локальный объект
* * * * smth1 = &smth2;
 
        smth1->GetABC();
        // при выходе из функции он уничтожается (удаляется из памяти)
* * }
    void TestClass::GetB()
* * {
* * * * smth1->GetABC(); // здесь указатель указывает на объект, которого уже не существует
* * }
Цитата Сообщение от kramos Посмотреть сообщение
И как в таком случае это исправить?
Создавать объект в динамической памяти:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    TestClass(int b): a(0), smth1(0) // пока ни на что не указывает, будет == 0.
    {
        if(b > 0)
            a = 20;
    }
    void TestClass::GetA()
* * {
* * * * cout << a << endl;
 
* * * * smth1 = new Smth(a); // создаём динамически
 
        smth1->GetABC();
* * }
    void TestClass::GetB()
* * {
        if (smth1 != 0) // если был создан, можно вызвать функцию
* * * *     smth1->GetABC();
* * }
    ~TestClass()
    {
        if (smth1 != 0) // если был создан, то уничтожаем объект
            delete smth1;
    }
0
07.08.2017, 22:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.08.2017, 22:23
Помогаю со студенческими работами здесь

Ошибка при работе с классами
Вот такой код: #include &lt;iostream&gt; using namespace std; class A { public: void ex(B b)...

Подробная информация по работе с классами
Посоветуйте книгу, где работа с классами была бы изложена так же хорошо как в Философии java Эккеля.

Ошибки при работе с классами на linux
Здравствуйте, нужна помощь по классам в си++. Я не так давно пишу на си++, поэтому не ругайте...

Ошибка в программе при работе с классами
Ребят есть задача Условие задачи Составить описание класса для определения одномерных...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru