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

Счетчик объектов класса - C++

Восстановить пароль Регистрация
 
Onigus
0 / 0 / 0
Регистрация: 09.04.2015
Сообщений: 26
05.07.2015, 10:26     Счетчик объектов класса #1
Всем доброго времени суток. Изучая язык С++ по книге Лафоре столкнулся с задачей которую не могу решить (будет скриншот задачи) точнее не понимаю условия как ее сделать. могу сделать по другому но тогда решения будет сделано проще и не соответствовать условию задачи, а мне хотелось бы побольше усвоить. кто сталкивался с такой задачий и знает что делать - прошу готовое решение не скидывать (только на крайний случай), лучше подскажите с чего и как начать или дайте дополнительный материал, если имеется. зарание спасибо за помощь)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Hrollo
34 / 34 / 6
Регистрация: 05.11.2013
Сообщений: 147
05.07.2015, 10:35     Счетчик объектов класса #2
Создайте в категории private счетчик с модификатором static и инкрементируйте его в конструкторе класса. Ну а потом присваивайте значение счетчика переменной которая отвечает за индекс объекта.
Dmy_
Заблокирован
05.07.2015, 12:00     Счетчик объектов класса #3
Я тебе все равно віволю код, у меня давно волляется, посматри, то или не то. Так или иначе, думаю пригодится,

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
 ////////////////////////////////////////////////////////////////////////////////////// 
#include <iostream>
#include <string>
////////////////////////////////////////////////////////////////////////////////////// 
typedef std::string  T_obj_name;
////////////////////////////////////////////////////////////////////////////////////// 
class A 
{
    const  T_obj_name  obj_name_;
    //--------------------------------------------------------------------------------
    static int count(const int  deltha = 0)
    {
        static int  counter = 0;                
        return  counter += deltha;
    }
public:
    A(const T_obj_name  obj_name = "noname") : obj_name_(obj_name)
    {
        count(1);
        std::cout << "Создан объект "        
                  << obj_name_
                  << ". "
                  << '\t';
        print_objects_count();                                     
    }
    //--------------------------------------------------------------------------------
    ~A()
    {
        count(-1);
        std::cout << "Удален объект "
                  << obj_name_
                  << ". "
                  << '\t';
        print_objects_count();                                     
    }
    //--------------------------------------------------------------------------------
    static void  print_objects_count()
    {
        std::cout << "Всего в программе "
                  << count()
                  << " объектов класса A."
                  << std::endl;        
    }
};
////////////////////////////////////////////////////////////////////////////////////// 
int main ()
{  
    std::locale::global(std::locale(""));
    A::print_objects_count();
    A   a("a");
    A*  arr = new A[2];
    delete[]  arr;
    A  b("b");
    A* arrrr = new A[3];
    A::print_objects_count();
}
ВиталийШ
3 / 3 / 3
Регистрация: 23.05.2015
Сообщений: 14
05.07.2015, 12:27     Счетчик объектов класса #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Onigus Посмотреть сообщение
лучше подскажите с чего и как начать
открой Лафора на странице 247, и прочти еще раз все про статические данные класса. Там даже пример написан, точь в точь с кодом который тебе необходим. Это ответ на твою просьбу. При желании скину решение этой задачи.
Onigus
0 / 0 / 0
Регистрация: 09.04.2015
Сообщений: 26
05.07.2015, 12:35  [ТС]     Счетчик объектов класса #5
спасибо, щас посмотрю)

Добавлено через 5 минут
Цитата Сообщение от ВиталийШ Посмотреть сообщение
открой Лафора на странице 247, и прочти еще раз все про статические данные класса. Там даже пример написан, точь в точь с кодом который тебе необходим. Это ответ на твою просьбу. При желании скину решение этой задачи.
оно, спасибо) я перед обращением на форум как-то не досмотрел и не обратил внимание на этот раздел. теперь все понятно, ща задачка решится как два пальца=)

Добавлено через 2 минуты
Цитата Сообщение от Dmy_ Посмотреть сообщение
Я тебе все равно віволю код, у меня давно волляется, посматри, то или не то. Так или иначе, думаю пригодится,
на даный момент слишком по умному для меня написан код, много чего там мне не понятно( но на будущее пригодится)
hoggy
5225 / 2116 / 403
Регистрация: 15.11.2014
Сообщений: 4,800
Завершенные тесты: 1
05.07.2015, 12:51     Счетчик объектов класса #6
Цитата Сообщение от Onigus Посмотреть сообщение
прошу готовое решение не скидывать
см под спойлером проффесиональную версию:

Кликните здесь для просмотра всего текста
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
//делается простенький шаблончик
 
#include <cstddef>
 
#pragma once
 
#ifndef _ATOMIC_
    #error include <atomic> first    
#endif
 
#ifdef dVIEWNUMBERS
 
    #ifndef _IOSTREAM_
        #error include <iostream> first    
    #endif
 
    #undef dVIEWNUMBERS
#define dVIEWNUMBERS \
        std::cout << "instances = " << Instances() << std::endl;
#else
    #define dVIEWNUMBERS
#endif
 
//--------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------
 
//the number of instances a class
template<class T> class Copies
{
    typedef std::atomic<size_t> 
        count_t;
public:
    
    ~Copies()              
        { 
            // количество вызванных деструкторов больше, 
            // чем количество предшествующих им конструкторов
            // (возможная причина такой неисправности - 
            // запуск диструктора ресурса в многопоточной среде)
            assert( NumInstances() > 0 && 
                "ERROR: DESTRUCTOR CALLED WITHOUT CONSTRUCTOR" );
 
            --NumInstances(); 
            dVIEWNUMBERS; 
        }
 
    Copies()              { ++NumInstances(); dVIEWNUMBERS; }
    Copies(const Copies&) { ++NumInstances(); dVIEWNUMBERS; }
    Copies(Copies&&)      { ++NumInstances(); dVIEWNUMBERS; }
 
    static const count_t& Instances() { return NumInstances(); }
private:
    static count_t& NumInstances()
        { static count_t n = 0; return n; }
};
 
//--------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------
 
#define COPIES_USED_ 
// ну а дальше уже можно использовать:
 
 
struct sample : Copies
{};
 
 
#include <iostream>
 
sample foo() { return sample(); }
 
int main()
{
    std::cout << "Hello, world!\n";
    
    {
        sample s;
        {
            sample s1;
            auto s2 = s1;
            {
                sample ss( foo() );
            }
        }
        
    }
    
    std::cout<<"number of samples: "<< sample::copies()<<" (must be 0)\n";
        
}
Dmy_
Заблокирован
05.07.2015, 13:01     Счетчик объектов класса #7
Спасибо!


на даный момент слишком по умному для меня написан код, много чего там мне не понятно( но на будущее пригодится)

Ничего, не обращай внимания, и кроме того, рассматривать хороший код (не мой) нормальній путь самобучения, по-моиму.
Onigus
0 / 0 / 0
Регистрация: 09.04.2015
Сообщений: 26
05.07.2015, 13:04  [ТС]     Счетчик объектов класса #8
Цитата Сообщение от hoggy Посмотреть сообщение
см под спойлером проффесиональную версию:
спасибо но я к такому еще не готов((

Добавлено через 1 минуту
Цитата Сообщение от Dmy_ Посмотреть сообщение
Ничего, не обращай внимания, и кроме того, рассматривать хороший код (не мой) нормальній путь самобучения, по-моиму.
hoggy
5225 / 2116 / 403
Регистрация: 15.11.2014
Сообщений: 4,800
Завершенные тесты: 1
05.07.2015, 13:16     Счетчик объектов класса #9
Цитата Сообщение от Onigus Посмотреть сообщение
спасибо но я к такому еще не готов((

да вам и не нужно понимать, как оно устроенно внутри.

любой ваш класс, который унаследовался от Копий:
C++
1
struct sample : Copies<sample>
преобритает метод,
с помощью которого можно узнать количество экземплячров:
C++
1
std::cout<<"number of samples: "<< sample::copies()<<" \n";
и все.
вы уже можете получать нужную вам информацию.
Taatshi
Администратор
 Аватар для Taatshi
11206 / 4791 / 247
Регистрация: 05.04.2011
Сообщений: 13,320
Записей в блоге: 2
05.07.2015, 14:49     Счетчик объектов класса #10
Onigus, размещать задание в виде картинки запрещено правилами форума. Перепечатайте в пост - модератор объединит сообщения.
Onigus
0 / 0 / 0
Регистрация: 09.04.2015
Сообщений: 26
06.07.2015, 09:43  [ТС]     Счетчик объектов класса #11
Цитата Сообщение от ВиталийШ Посмотреть сообщение
При желании скину решение этой задачи.
Будьте так добры скинуть все-таки код. вчера пытался нескольео часов решить задачу - не получилось((
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.07.2015, 10:52     Счетчик объектов класса
Еще ссылки по теме:

Массив объектов класса как член другого класса C++
Построение описания класса, создание и уничтожение объектов этого класса C++
Массив объектов класса C++

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

Или воспользуйтесь поиском по форуму:
ВиталийШ
3 / 3 / 3
Регистрация: 23.05.2015
Сообщений: 14
06.07.2015, 10:52     Счетчик объектов класса #12
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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>
using namespace std;
 
class partNumber
{
private:
    static int count;
    int pnum;
public:
    partNumber()
    {count++; pnum = count; }
    void display()const
    {
        cout << "Мой порядковый номер: " << pnum << endl;
    }
};
int partNumber::count = 0;
int main()
{
    setlocale(LC_ALL, "Russian");
    partNumber num1, num2, num3;
    num1.display();
    num2.display();
    num3.display();
    return 0;
}
Yandex
Объявления
06.07.2015, 10:52     Счетчик объектов класса
Ответ Создать тему
Опции темы

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