powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Господа, помогите на простом примере понять как это реализуется (С++)
25 сообщений из 29, страница 1 из 2
Господа, помогите на простом примере понять как это реализуется (С++)
    #33819483
вот допустим такой класс:
Код: plaintext
1.
2.
3.
4.
5.
class cl
{
   int a;
   int b;
};
как например написать статическую функцию вывода всех созданных объектов класса?

как будет выглядеть программа? искал что-то подобное и не нашел. если можно напишите пожалуйста реализацию этого вопроса, я по ней разберусь с работой статических функций. к своему великому стыду никогда ими не пользовался.
заранее спасибо!
...
Рейтинг: 0 / 0
Господа, помогите на простом примере понять как это реализуется (С++)
    #33819556
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не приходит ничего в голову, кроме, как создавать, к примеру, статический динамический массив, куда будут складываться, все указатели классов при инициализации, а статическая функция будет этот массив распечатывать.
...
Рейтинг: 0 / 0
Господа, помогите на простом примере понять как это реализуется (С++)
    #33819590
а если можно, все таки примерчик приведите
...
Рейтинг: 0 / 0
Господа, помогите на простом примере понять как это реализуется (С++)
    #33819622
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не уверен, что это правельный/оптимальный вариант...
...
Рейтинг: 0 / 0
Господа, помогите на простом примере понять как это реализуется (С++)
    #33819662
если честно не думал что это такой сложный вопрос, на который даже спецы не могут ответить...
и все же, если кто знает КАК, напишите пожалуйста пример!
...
Рейтинг: 0 / 0
Господа, помогите на простом примере понять как это реализуется (С++)
    #33819712
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
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.
class A;
class A {
    public:
        A(int n);
	int a;

        static A **p;
	static int p_n;
	static void print();
};

A **A::p=NULL;
int A::p_n= 0 ;

A::A(int n) {
    a=n;

    if (p==NULL) p=(A**)malloc(sizeof(A*));
    else p=(A**)realloc(p, sizeof(A*)*(p_n+ 1 ));

    p[p_n]=this;
    p_n++;
}

void A::print() {
    int i;
    for (i= 0  ; i<p_n ; i++) printf("%d ", p[i]->a);
}
...
Рейтинг: 0 / 0
Господа, помогите на простом примере понять как это реализуется (С++)
    #33819717
AkhНе уверен, что это правельный/оптимальный вариант... этот вариант решения задачи может и не на столько правильный, но тоже с интересом бы разобрал его. можно пример?
...
Рейтинг: 0 / 0
Господа, помогите на простом примере понять как это реализуется (С++)
    #33819722
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спешали, вор ю.

Сам очень редко использую.
...
Рейтинг: 0 / 0
Господа, помогите на простом примере понять как это реализуется (С++)
    #33819825
хм..., довольно новороченно получилось... а в main() что?
...
Рейтинг: 0 / 0
Господа, помогите на простом примере понять как это реализуется (С++)
    #33819852
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Трудно догадаться?
...
Рейтинг: 0 / 0
Господа, помогите на простом примере понять как это реализуется (С++)
    #33819931
да нет, не трудно :)
Код: plaintext
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.
#include <iostream.h>
#include <stdlib.h>

class A;
class A {
    public:
        A(int n);
	int a;

        static A **p;
	static int p_n;
	static void print();
};

A **A::p=NULL;
int A::p_n= 0 ;

A::A(int n) {
    a=n;

    if (p==NULL) p=(A**)malloc(sizeof(A*));
    else p=(A**)realloc(p, sizeof(A*)*(p_n+ 1 ));

    p[p_n]=this;
    p_n++;
}

void A::print() {
    int i;
    for (i= 0  ; i<p_n ; i++) cout<<("%d ", p[i]->a);
}

int main()
{
	A aaa( 6 );
	A bbb( 2 );
	A ccc( 5 );
	A::print();
}
в итоге ответ: цифры которые в скобках. я может быть не так что то понимаю, но мне казалось, что должны выводиться "aaa", "bbb", "ccc". Или исходя из поставленного задания это не так?
...
Рейтинг: 0 / 0
Господа, помогите на простом примере понять как это реализуется (С++)
    #33819971
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все правильно, ибо имена переменных не будут известны при исполнении, это просто адреса в памяти. и тут выводятся данные, содержащиеся в объектах
...
Рейтинг: 0 / 0
Господа, помогите на простом примере понять как это реализуется (С++)
    #33819975
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Передавай вместо цифр имя объекта
...
Рейтинг: 0 / 0
Господа, помогите на простом примере понять как это реализуется (С++)
    #33820005
так при поставленном задании что нужно получить всё таки? цифры те что в ( ) или сами ааа, bbb, ccc ?
А ааа(А ааа); так что ли?
...
Рейтинг: 0 / 0
Господа, помогите на простом примере понять как это реализуется (С++)
    #33820006
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чтобы не дублировать информацию можешь написать макрос для создания объекта, например:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
#define CREATE_CLASS_A(class_name) class_name( #class_name );

...

A CREATE_CLASS_A(aaa);
A CREATE_CLASS_A(bbb);
A CREATE_CLASS_A(ccc);
...
Рейтинг: 0 / 0
Господа, помогите на простом примере понять как это реализуется (С++)
    #33820014
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"функцию вывода всех созданных объектов класса?" - я бы это понял как вывод содержимого объектов - то есть их полей. Что и сделал Akh.
...
Рейтинг: 0 / 0
Господа, помогите на простом примере понять как это реализуется (С++)
    #33820017
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир С.Г.так при поставленном задании что нужно получить всё таки? цифры те что в ( ) или сами ааа, bbb, ccc ?

Смортя, что понимать под "выводом объекта".
...
Рейтинг: 0 / 0
Господа, помогите на простом примере понять как это реализуется (С++)
    #33820244
ну да, согласен :) видимо имеется ввиду именно содержимое объекта. ну тогда все работает. а тогда зачем вместо цифр передавать имена объектов? у нас ведь данные внутри класса цифрового формата.
...
Рейтинг: 0 / 0
Господа, помогите на простом примере понять как это реализуется (С++)
    #33820368
хм..., а как переписать этот пример чтоб он был без динамического выделения памяти и без двойного указателя?
...
Рейтинг: 0 / 0
Господа, помогите на простом примере понять как это реализуется (С++)
    #33820394
Фотография PPA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир С.Г.хм..., а как переписать этот пример чтоб он был без динамического выделения памяти и без двойного указателя?

std::vector
...
Рейтинг: 0 / 0
Господа, помогите на простом примере понять как это реализуется (С++)
    #33820401
ну а как через вектор сделать? про векторы читал, честное слово, и даже с помощью них чего-то крапал...
...
Рейтинг: 0 / 0
Господа, помогите на простом примере понять как это реализуется (С++)
    #33820427
ваяю свое без динамического распределения памяти, двойных указателей и векторов... если кто знает подскажите пожалуйста где я не прав???
Код: plaintext
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.
class drob
{
	double chisl; 
	double znam;
	static int kol;
	static drob* set[];
public: 
//	drob(double c, double z) {c=chisl; z=znam; set[kol++] = this;}
	drob(double chisl= 1 . 0 , double znam= 1 . 0 );
	void PrintSum ();
	static void disp();
};
//---------------------------------
int drob::kol =  0 ;
drob* drob::set[ 10 ];
//---------------------------------
drob::drob(double chisl= 1 . 0 , double znam= 1 . 0 )
{   //error: 'drob::drob' : redefinition of default parameter : parameter 2
    // error: 'drob::drob' : redefinition of default parameter : parameter 1
	double c=chisl; 
	double z=znam; 
	set[kol++]=this;
}
//----------------------------------
void drob :: PrintSum ()
{
	cout << ("%d",chisl) << ',';
	cout << ("%d",znam) << endl;
}
//----------------------------------
void drob::disp()
{
	for (int i= 0 ; i<kol; i++)
	{
		set[i]->PrintSum();
	}
	cout << "Vsego " << kol << " objektov" << endl;
}
//----------------------------------
int main()
{
	drob a1( 4 . 0 ,  2 . 0 );
	drob a2( 6 . 0 ,  3 . 0 );
	drob a3( 10 . 0 ,  5 . 0 );
	drob::disp();
}
если я пишу не конструктор по умолчанию (хотя именно он мне и нужен), то выводится на экран всякая хрень, вместо:
4.0, 2.0
6.0, 3.0
10.0, 5.0
количество объектов считает правильно...
подскажите, пожалуста где я не так написал? если можно - подправьте как правильно это делается. очень нужно, правда!
...
Рейтинг: 0 / 0
Господа, помогите на простом примере понять как это реализуется (С++)
    #33820464
Фотография PPA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
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.
#include <iostream>
#include <set>

class A
{
        int a;
        static std::set<A*> p;
    public:
        A( int n )  : a( n )
         {
             p.insert( this );
         }
        virtual ~A()
         {
             p.erase( this );
         }
        static void print()
             {
                for ( std::set<A*>::const_iterator i = p.begin() ; i != p.end() ; ++i )
                      std::cout << (*i)->a;
             }
};
std::set<A*> A::p;

int main( int argc, char* argv[] )
{
        A aaa( 6 );
	A bbb( 2 );
	A ccc( 5 );
	A::print();
}
p.s.
если важна хронология создания, то нужно воспользоваться
другим контейнером.
...
Рейтинг: 0 / 0
Господа, помогите на простом примере понять как это реализуется (С++)
    #33820598
видимо сообщения мы отправили одновременно. почему же у меня не работает конструктор по умолчанию? и выдается всякая ересь?
Код: plaintext
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.
class drob
{
	double chisl; 
	double znam;
	static int kol;
	static drob* set[];
public: 
	drob(double c= 1 . 0 , double z= 1 . 0 );
	void PrintSum ();
	static void disp();
};

int drob::kol =  0 ;
drob* drob::set[ 10 ];

drob::drob(double c= 1 . 0 , double z= 1 . 0 )
{  //'drob::drob' : redefinition of default parameter : parameter 2
   //'drob::drob' : redefinition of default parameter : parameter 1
	chisl=c; 
	znam=z; 
	set[kol++]=this;
}

void drob :: PrintSum ()
{
	cout << ("%d",chisl) << ',';
	cout << ("%d",znam) << endl;
}

void drob::disp()
{
	for (int i= 0 ; i<kol; i++)
	{
		set[i]->PrintSum();
	}
	cout << "Vsego " << kol << " objektov" << endl;
}

int main()
{
	drob a1( 4 . 0 ,  2 . 0 );
	drob a2( 6 . 0 ,  3 . 0 );
	drob a3( 10 . 0 ,  5 . 0 );
	drob::disp();
}
...
Рейтинг: 0 / 0
Господа, помогите на простом примере понять как это реализуется (С++)
    #33820631
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир С.Г.
как например написать статическую функцию вывода всех созданных объектов класса?


Для того, чтобы написать такую функцию, тебе нужно иметь этот список всех созданных объектов этого класса.
Для того чтобы его иметь, надо во всех конструкторах регистрировать созданные объекты в этом списке. В деструкторах соответственно разрегистрировать. Если нужно multi-threading, нужно синхронизировать доступ к этому списку (он должен быть глобальным для программы). Статические объекты этого класса надо тоже будет как-то особо обрабатывать или прилагать усилия чтобы все работало.

Владимир С.Г.
как будет выглядеть программа? искал что-то подобное и не нашел.


Потому что никому это на фиг не нужно.
...
Рейтинг: 0 / 0
25 сообщений из 29, страница 1 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Господа, помогите на простом примере понять как это реализуется (С++)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]