Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041

Работа с классами

09.09.2013, 13:56. Показов 1870. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет!!!

Есть задачка: "Определите класс Oper, содержащий идентификатор типа ld (string или C-строка) и операцию (указатель на функцию или функциональный объект). Определите класс Cat_object, который содержит список элементов типа Oper и void*. Снабдите Cat_object операциями add_oper(Oper), которая добавляет Oper к списку; remove_oper(id), которая удаляет Oper, идентифицируемую с помощью Id из списка; operator()(Id, arg), которая активизирует Oper идентифицируемый с помощью Id. Реализуйте стек котов посредством Cat_object. Напишите небольшую программу для тестирования этих классов."

и еще одна из этой оперы: "Определите шаблон Object на базе класса Cat_object. Используйте Object для реализации стека строк. Напишите небольшую программу для тестирования этого шаблона."

Хорошо бы если б кто то написал рабочий прототип.

И эта от строчка не сильно ясна "который содержит список элементов типа Oper и void*" что это за список элементов типа void* ???
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.09.2013, 13:56
Ответы с готовыми решениями:

Работа с классами
Помогите пожалуйста с заданием Создать базовый класс Человек. Каждый объект класса должен содержать следующие данные: ФИО, год рождения,...

Работа с классами
Помогите пожалуйста написать программу. Задан массив действительных чисел. Найти количество элементов, значение которых меньше...

Работа с классами
Помогите решить задачу с использованием классов Дан текст. необходимо удвоить каждый символ в этом тексте, включая пробелы.

12
188 / 187 / 46
Регистрация: 24.03.2011
Сообщений: 670
09.09.2013, 13:57
Цитата Сообщение от ninja2 Посмотреть сообщение
Хорошо бы если б кто то написал рабочий прототип
Да, это хорошо...
0
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
09.09.2013, 14:05  [ТС]
Цитата Сообщение от monolit Посмотреть сообщение
Да, это хорошо...
Ну так попробуй мб у тебя получится что то сделать?

Это задание для новичков в С++, от попробуй справишься с ним или нет, как говорится попытка не пытка !!!
0
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
10.09.2013, 13:21  [ТС]
От я написал рабочий код первой задачки:
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
#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;
#include <vector>
using std::vector;
 
typedef string id;//иднтификаторы
typedef string arg;//аргумент
typedef void (*PF)(arg);//указатель на функцию
 
class Oper
{
    friend class Cat_object;
    id ident;
    PF p_f;
public:
    Oper(id s, PF yk):ident(s),p_f(yk){}
};
 
class Cat_object
{
    vector<Oper> l;
public:
    Cat_object(){}
    void add_oper(Oper o)
    {
        l.push_back(o);
    }
    void remove_oper_id(id ii)
    {
        vector<Oper>::iterator it;
        for(it=l.begin();it!=l.end();++it)
        {
            if((*it).ident==ii){l.erase(it);break;}
        }
    }
    void operator()(id ii,arg a)
    {
        for(int i=0;i<l.size();i++)
        {
            if(l[i].ident==ii)
            {
                l[i].p_f(a);//выполнение
            }
        }
    }
    int size(){return l.size();}
};
 
void print1(arg a=""){cout <<"print1 arg= "<<a<<endl;}
void print2(arg a=""){cout <<"print2 arg= "<<a<<endl;}
void print3(arg a=""){cout <<"print3 arg= "<<a<<endl;}
 
int main()
{
    Oper o1("one",print1);
    Oper o2("two",print2);
    Oper o3("three",print3);
 
    Cat_object c;
    c.add_oper(o1);
    c.add_oper(o2);
    c.add_oper(o3);
    cout <<"c.size()= "<<c.size()<<endl;
    c.remove_oper_id("one");
    cout <<"c.size()= "<<c.size()<<endl;
 
    c("two","hellow world");
    c("three","hellow world gacpada!!!");
 
    return 0;
}
Еще не полностью от эта строчка непонятна "Реализуйте стек котов посредством Cat_object.", что мне нужно тут стек построить Stack<Cat_object>?

И по второй задаче вообще непонятно "Определите шаблон Object на базе класса Cat_object. Используйте Object для реализации стека строк. Напишите небольшую программу для тестирования этого шаблона." Как мне можно использовать Object для реализации стека строк и что вообще понимать под стеком строк? Я так предполагаю по аналогии с Cat_object класс Object должен в себе хранить список строк например по аналогии vector<Oper> то знаичт vector<list>???

Добавлено через 1 минуту
Давайте разберем теоретическое решение, как ее все таки нужно правильно делать!!!!

Добавлено через 3 минуты
Вообще от тока идея возникла нужно просто сделать наследование в первой задаче от Cat_object для реализации стека, и во втором случае от Object так же сделать наследование и снова реализовать stack для строк. В принципе под условие подходит.

Мб у вас есть другие варианты?
0
 Аватар для Olivеr
415 / 411 / 95
Регистрация: 06.10.2011
Сообщений: 832
10.09.2013, 13:48
вообще бессмысленное задание
я даже конструкторы не стал писать
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <list>
#include <string>
#include <exception>
#include <functional>
#include <algorithm>
 
class Oper
{
    using Op = void(*)(int);
    std::string id;
    Op oper;
public:
    std::string get_id() const { return id; }
    void operator * (int x)
    {
        if (oper == nullptr) throw std::bad_function_call();
        oper(x);
    }
};
 
class Cat_object
{
    std::list<Oper> list;
    void *current;
public:
    void add_oper(const Oper &op)
    {
        list.push_back(op);
    }
    void remove_oper(const std::string &id)
    {
        list.erase( std::find_if( begin(list), end(list),
                        [&id](const Oper &op){ return op.get_id() == id; } ) );
    }
    void operator () (const std::string &id, Oper &op) const
    {
        auto it = std::find_if( begin(list), end(list),
                        [&id](const Oper &op){ return op.get_id() == id; } );
        if (it != end(list)) {
            op = *it;
            return;
        }
        op = Oper();
        // throw ...
    }
};
 
int main()
{
    return 0;
}


Добавлено через 37 секунд
хотя в учебнике Страуструпа такое не редкость
1
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
10.09.2013, 14:55  [ТС]
А эту задачку кто знает как делать? ""Определите шаблон Object на базе класса Cat_object. Используйте Object для реализации стека строк. Напишите небольшую программу для тестирования этого шаблона.""

на базе Cat_object ну зделаю я class Object : public Cat_object, а что дальше?
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
#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;
#include <vector>
using std::vector;
 
typedef string id;//иднтификаторы
typedef string arg;//аргумент
typedef void (*PF)(arg);//указатель на функцию
 
class Oper
{
    friend class Cat_object;
    friend class Stack;
    id ident;
    PF p_f;
public:
    Oper(id s, PF yk):ident(s),p_f(yk){}
};
 
class Cat_object
{
    vector<Oper> l;
public:
    Cat_object(){}
    void add_oper(Oper o)
    {
        l.push_back(o);
    }
    void remove_oper_id(id ii)
    {
        vector<Oper>::iterator it;
        for(it=l.begin();it!=l.end();++it)
        {
            if((*it).ident==ii){l.erase(it);break;}
        }
    }
    void operator()(id ii,arg a)
    {
        for(int i=0;i<l.size();i++)
        {
            if(l[i].ident==ii)
            {
                l[i].p_f(a);//выполнение
            }
        }
    }
    int size(){return l.size();}
};
 
template<class T>
class Object : public Cat_object
{
    
};
 
void print1(arg a=""){cout <<"print1 arg= "<<a<<endl;}
void print2(arg a=""){cout <<"print2 arg= "<<a<<endl;}
void print3(arg a=""){cout <<"print3 arg= "<<a<<endl;}
 
int main()
{
    Oper o1("one",print1);
    Oper o2("two",print2);
    Oper o3("three",print3);
 
    Cat_object c;
    c.add_oper(o1);
    c.add_oper(o2);
    c.add_oper(o3);
    cout <<"c.size()= "<<c.size()<<endl;
    c.remove_oper_id("one");
    cout <<"c.size()= "<<c.size()<<endl;
 
    c("two","hellow world");
    c("three","hellow world gacpada!!!");
 
    return 0;
}
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
10.09.2013, 16:01
ninja2,
Реализуйте стек котов посредством Cat_object
Что-то я не наблюдаю стека котов.
0
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
10.09.2013, 17:54  [ТС]
Цитата Сообщение от ForEveR Посмотреть сообщение
Что-то я не наблюдаю стека котов.
От что то вроде стека котов:
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
91
92
93
94
95
96
97
98
99
100
#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;
#include <vector>
using std::vector;
 
typedef string id;//иднтификаторы
typedef string arg;//аргумент
typedef void (*PF)(arg);//указатель на функцию
 
class Oper
{
    friend class Cat_object;
    friend class Stack;
    id ident;
    PF p_f;
public:
    Oper(id s, PF yk):ident(s),p_f(yk){}
};
 
class Cat_object
{
    friend class Stack;
    vector<Oper> l;
public:
    Cat_object(){}
    void add_oper(Oper o)
    {
        l.push_back(o);
    }
    void remove_oper_id(id ii)
    {
        vector<Oper>::iterator it;
        for(it=l.begin();it!=l.end();++it)
        {
            if((*it).ident==ii){l.erase(it);break;}
        }
    }
    void operator()(id ii,arg a)
    {
        for(int i=0;i<l.size();i++)
        {
            if(l[i].ident==ii)
            {
                l[i].p_f(a);//выполнение
            }
        }
    }
    int size(){return l.size();}
};
 
class Stack : public Cat_object
{
public:
    Stack(){};
    void push(Oper o){add_oper(o);}
    void pop(arg s)
    {
        if(l.size()!=0)
        {
            operator()(l.back().ident,s);
            l.erase(--l.end());
        }
    }
};
 
void print1(arg a=""){cout <<"print1 arg= "<<a<<endl;}
void print2(arg a=""){cout <<"print2 arg= "<<a<<endl;}
void print3(arg a=""){cout <<"print3 arg= "<<a<<endl;}
 
int main()
{
    Oper o1("one",print1);
    Oper o2("two",print2);
    Oper o3("three",print3);
 
    Cat_object c;
    c.add_oper(o1);
    c.add_oper(o2);
    c.add_oper(o3);
    cout <<"c.size()= "<<c.size()<<endl;
    c.remove_oper_id("one");
    cout <<"c.size()= "<<c.size()<<endl;
 
    c("two","hellow world");
    c("three","hellow world gacpada!!!");
 
    Stack s;
    s.push(o1);
    s.push(o2);
    s.push(o3);
    s.pop("iiii");
    s.pop("222");
    s.pop("3333");
 
 
    return 0;
}
От эту задачку не понятно что делать: "Определите шаблон Object на базе класса Cat_object. Используйте Object для реализации стека строк. Напишите небольшую программу для тестирования этого шаблона."

Добавлено через 2 минуты
Как Object сделать и стек строк построить?

Добавлено через 2 минуты
Это я так стек кое как сделал лишь бы что то было .

Добавлено через 2 минуты
Задачка еще продолжение после того как Object мы определим нужно еще от что сделать: "Определите вариант класса Object под именем Class, который гарантирует, что объекты с одинаковыми операциями совместно разделяют список операций. Напишите небольшую программу для тестирования этого шаблона."

ЕЕ тоже нужно сделать.

Добавлено через 7 минут
И еще продолжение: "Определите шаблон Stack, который предоставляет традиционный и безопасный по типу интерфейс к стеку, реализованному шаблоном Object. Сравните этот стек с вариантами стековых классов из предыдущих упражнений. Напишите небольшую программку для тестирования этого шаблона."

В общем без создания Object не обойтись, три упражнения на нем повязаны. Чото не пойму как его делать, наверно первое упражнение на Cat_object не правильно мб сделал ????

Добавлено через 1 час 24 минуты
Что никто не знает что тут делать? Тут эти задачки похоже на какой нить прием ООП.

Добавлено через 37 секунд
Мб хоть кто то просто своими словами объяснить, что хотят что бы мы сделали?
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
10.09.2013, 18:17
ninja2, Аргумент функции должен быть void* (вашем случае arg должен быть typedef не на string, а на void), тогда все станет понятно.
0
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
10.09.2013, 18:52  [ТС]
Цитата Сообщение от ForEveR Посмотреть сообщение
Аргумент функции должен быть void* (вашем случае arg должен быть typedef не на string, а на void), тогда все станет понятно.
И что оно мне дает?

Добавлено через 10 минут
от изменил и все рамно не понятно:
Кликните здесь для просмотра всего текста
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
91
92
93
94
95
96
97
98
99
100
#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;
#include <vector>
using std::vector;
 
typedef string id;//иднтификаторы
typedef void arg;//аргумент
typedef void (*PF)(arg);//указатель на функцию
 
class Oper
{
    friend class Cat_object;
    friend class Stack;
    id ident;
    PF p_f;
public:
    Oper(id s, PF yk):ident(s),p_f(yk){}
};
 
class Cat_object
{
    friend class Stack;
    vector<Oper> l;
public:
    Cat_object(){}
    void add_oper(Oper o)
    {
        l.push_back(o);
    }
    void remove_oper_id(id ii)
    {
        vector<Oper>::iterator it;
        for(it=l.begin();it!=l.end();++it)
        {
            if((*it).ident==ii){l.erase(it);break;}
        }
    }
    void operator()(id ii)
    {
        for(int i=0;i<l.size();i++)
        {
            if(l[i].ident==ii)
            {
                l[i].p_f();//выполнение
            }
        }
    }
    int size(){return l.size();}
};
 
class Stack : public Cat_object
{
public:
    Stack(){};
    void push(Oper o){add_oper(o);}
    void pop()
    {
        if(l.size()!=0)
        {
            operator()(l.back().ident);
            l.erase(--l.end());
        }
    }
};
 
void print1(arg){cout <<"print1 arg= "<<endl;}
void print2(arg){cout <<"print2 arg= "<<endl;}
void print3(arg){cout <<"print3 arg= "<<endl;}
 
int main()
{
    Oper o1("one",print1);
    Oper o2("two",print2);
    Oper o3("three",print3);
 
    Cat_object c;
    c.add_oper(o1);
    c.add_oper(o2);
    c.add_oper(o3);
    cout <<"c.size()= "<<c.size()<<endl;
    c.remove_oper_id("one");
    cout <<"c.size()= "<<c.size()<<endl;
 
    c("two");
    c("three");
 
    Stack s;
    s.push(o1);
    s.push(o2);
    s.push(o3);
    s.pop();
    s.pop();
    s.pop();
 
 
    return 0;
}
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
10.09.2013, 19:54
ninja2, Не void, а void* - это принципиально разные вещи. Суть в том, что хранить можно будет указатели на объекты любых типов.
0
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
11.09.2013, 13:35  [ТС]
Цитата Сообщение от ForEveR Посмотреть сообщение
Не void, а void* - это принципиально разные вещи. Суть в том, что хранить можно будет указатели на объекты любых типов.
Ну от вроде так нужно?
Кликните здесь для просмотра всего текста
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
#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;
#include <vector>
using std::vector;
 
typedef string id;//иднтификаторы
typedef void* arg;//аргумент
typedef void* (*PF)(arg);//указатель на функцию
 
class Oper
{
    friend class Cat_object;
    friend class Stack;
    id ident;
    PF p_f;
public:
    Oper(id s, PF yk):ident(s),p_f(yk){}
};
 
class Cat_object
{
    friend class Stack;
    vector<Oper> l;
public:
    Cat_object(){}
    void add_oper(Oper o)
    {
        l.push_back(o);
    }
    void remove_oper_id(id ii)
    {
        vector<Oper>::iterator it;
        for(it=l.begin();it!=l.end();++it)
        {
            if((*it).ident==ii){l.erase(it);break;}
        }
    }
    void* operator()(id ii,arg a)
    {
        for(int i=0;i<l.size();i++)
        {
            if(l[i].ident==ii)
            {
                return l[i].p_f(a);//выполнение
            }
        }
    }
    int size(){return l.size();}
};
 
 
void* print1(arg a){cout <<"print1 arg= "<<*(int*)(a)<<endl;return a;}
void* print2(arg a){cout <<"print2 arg= "<<*(int*)(a)<<endl;return a;}
void* print3(arg a){cout <<"print3 arg= "<<*(int*)(a)<<endl;return a;}
 
int main()
{
    Oper o1("one",print1);
    Oper o2("two",print2);
    Oper o3("three",print3);
 
    Cat_object c;
    c.add_oper(o1);
    c.add_oper(o2);
    c.add_oper(o3);
    cout <<"c.size()= "<<c.size()<<endl;
    c.remove_oper_id("one");
    cout <<"c.size()= "<<c.size()<<endl;
 
    int* a=new int(4);
    int* b=new int(10);
 
    c("two",a);
    cout <<*(int*)(c("three",b))<<endl;
 
 
    return 0;
}


Такой получился указатель на функцию
C++
1
2
typedef void* arg;//аргумент
typedef void* (*PF)(arg);
И что это мне дает? Я вроде могу только присвоить ему не каждую функцию, а только такого вида:
C++
1
void* print1(arg a)
Да принять мы можем указатель на любой объект и вернуть можем любой объект, но задачку непонятно все рамно как делать.

Что от нас хотят что бы мы сделали хоть примерно господа ваши варианты!!!

Добавлено через 4 минуты
Как мне стек котов построить, я понимаю стек это первый вошел последний вышел, для чисел допустим записали 1 2 3 и вышло 3 2 1, для котов как это будет? Что мы в стеке должны хранить похоже указатель на Cat_object, наследование похоже не катит Cat_object это не Stack_object. Ну как же его что делать дальше?

Добавлено через 29 минут
От написал стек котов как положено вроде:
Кликните здесь для просмотра всего текста
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;
#include <vector>
using std::vector;
#include <cstdlib>
using std::exit;
 
typedef string id;//иднтификаторы
typedef void* arg;//аргумент
typedef void* (*PF)(arg);//указатель на функцию
 
class Oper
{
    friend class Cat_object;
    friend class Stack;
    id ident;
    PF p_f;
public:
    Oper(id s, PF yk):ident(s),p_f(yk){}
};
 
class Cat_object
{
    friend class Stack;
    vector<Oper> l;
public:
    Cat_object(){}
    //Cat_object(const Cat_object& c):l(c.l){}
    //Cat_object& operator=(const Cat_object& c){l=c.l;return *this;}
    void add_oper(Oper o)
    {
        l.push_back(o);
    }
    void remove_oper_id(id ii)
    {
        vector<Oper>::iterator it;
        for(it=l.begin();it!=l.end();++it)
        {
            if((*it).ident==ii){l.erase(it);break;}
        }
    }
    void* operator()(id ii,arg a)
    {
        for(int i=0;i<l.size();i++)
        {
            if(l[i].ident==ii)
            {
                return l[i].p_f(a);//выполнение
            }
        }
        return 0;
    }
    int size(){return l.size();}
};
 
class Stack
{
    Cat_object* p;
    int size;
public:
    Stack():size(0){p=new Cat_object();}
    void push(Cat_object c)
    {
        Cat_object* temp=p;
        p=new Cat_object[size+1];
        
        for(int i=0;i<size;i++)
            p[i]=temp[i];
        p[size]=c;
        ++size;
    }
 
    void pop(Cat_object& c)
    {
        if(size==0)
        {
            cout <<"stack is empty"<<endl; return;
        }
        else
        {
            c=p[size-1];
            Cat_object* temp=p;
            size--;
            p=new Cat_object[size];
            for(int i=0;i<size;i++)
                p[i]=temp[i];
            return;
        }
    }
 
    int size_t(){return size;}
 
};
 
 
void* print1(arg a){cout <<"print1 arg= "<<*(int*)(a)<<endl;return a;}
void* print2(arg a){cout <<"print2 arg= "<<*(int*)(a)<<endl;return a;}
void* print3(arg a){cout <<"print3 arg= "<<*(int*)(a)<<endl;return a;}
 
int main()
{
    Oper o1("one",print1);
    Oper o2("two",print2);
    Oper o3("three",print3);
 
    Cat_object c;
    c.add_oper(o1);
    c.add_oper(o2);
    c.add_oper(o3);
    cout <<"c.size()= "<<c.size()<<endl;
    c.remove_oper_id("one");
    cout <<"c.size()= "<<c.size()<<endl;
 
    int* a=new int(4);
    int* b=new int(10);
 
    c("two",a);
    cout <<*(int*)(c("three",b))<<endl;
 
    Stack s;
    cout <<"s.size_t()= "<<s.size_t()<<endl;
    s.push(c);
    cout <<"s.size_t()= "<<s.size_t()<<endl;
    Cat_object d;
    d.add_oper(o1);
    s.push(d);
    cout <<"s.size_t()= "<<s.size_t()<<endl;
 
    Cat_object e;
    s.pop(e);
    e("one",a);
    cout <<"s.size_t()= "<<s.size_t()<<endl;
 
    s.pop(e);
    e("three",b);
    cout <<"s.size_t()= "<<s.size_t()<<endl;
 
    return 0;
}


Добавлено через 47 секунд
Вообще не понятно зачем создавать этот стек котов, от него ж толку ноль.

Добавлено через 2 минуты
Мне яснее не стало как решать эту от задачку "Определите шаблон Object на базе класса Cat_object. Используйте Object для реализации стека строк. Напишите небольшую программу для тестирования этого шаблона."

Ну и как мне определить это шаблон Object? Что он должен делать? На базе Cat_object это что значит, нужно сделать наследование от Cat_object? Не понятно вообще что тут делать????

Добавлено через 7 минут
Тут полюбом какой то приемчик из ООП используется, давайте господа шустрее думаем, очень интересные задачки, неужели никто и не догадался что тут от нас хотят???
0
2688 / 2260 / 244
Регистрация: 03.07.2012
Сообщений: 8,231
Записей в блоге: 1
11.09.2013, 15:25
Это только некоторым "гурам" кажется, что интересные. Уже погонять начинают
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.09.2013, 15:25
Помогаю со студенческими работами здесь

работа с классами в С++
Пусть есть class.срр, в котором описан класс MyClass{ public: int i; ... } Есть файл main.cpp, в нем я использую...

Работа с классами
Помогите с задачей, пожалуйста! Условие на фотографии: Перепечатывайте задание на форум.

Работа с классами
плиз помогите решить нужно написать функции которыи будут выполнять сложение, вычитание, умножение и деление допустим d1 и d3 вот то...

работа с классами
помогите пожалуйста написать программу на C++: Создать класс Complex для работы с комплексными числами,который должен содержать два...

Работа с классами
Есть такой код: CMainWindow MainWindow; CUITextView textTest; textTest.SetText(&quot;Text View Test&quot;); ...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru