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

Работа с классами - C++

Восстановить пароль Регистрация
 
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
09.09.2013, 13:56     Работа с классами #1
Привет!!!

Есть задачка: "Определите класс 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* ???
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.09.2013, 13:56     Работа с классами
Посмотрите здесь:

C++ Работа с классами.
C++ Работа с классами
Работа с классами C++
Работа с классами C++
C++ Работа с классами
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
monolit
179 / 179 / 21
Регистрация: 24.03.2011
Сообщений: 641
Завершенные тесты: 1
09.09.2013, 13:57     Работа с классами #2
Цитата Сообщение от ninja2 Посмотреть сообщение
Хорошо бы если б кто то написал рабочий прототип
Да, это хорошо...
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
09.09.2013, 14:05  [ТС]     Работа с классами #3
Цитата Сообщение от monolit Посмотреть сообщение
Да, это хорошо...
Ну так попробуй мб у тебя получится что то сделать?

Это задание для новичков в С++, от попробуй справишься с ним или нет, как говорится попытка не пытка !!!
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
10.09.2013, 13:21  [ТС]     Работа с классами #4
От я написал рабочий код первой задачки:
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 для строк. В принципе под условие подходит.

Мб у вас есть другие варианты?
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
10.09.2013, 13:48     Работа с классами #5
вообще бессмысленное задание
я даже конструкторы не стал писать
Кликните здесь для просмотра всего текста
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 секунд
хотя в учебнике Страуструпа такое не редкость
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
10.09.2013, 14:55  [ТС]     Работа с классами #6
А эту задачку кто знает как делать? ""Определите шаблон 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;
}
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
10.09.2013, 16:01     Работа с классами #7
ninja2,
Реализуйте стек котов посредством Cat_object
Что-то я не наблюдаю стека котов.
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
10.09.2013, 17:54  [ТС]     Работа с классами #8
Цитата Сообщение от 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 секунд
Мб хоть кто то просто своими словами объяснить, что хотят что бы мы сделали?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
10.09.2013, 18:17     Работа с классами #9
ninja2, Аргумент функции должен быть void* (вашем случае arg должен быть typedef не на string, а на void), тогда все станет понятно.
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
10.09.2013, 18:52  [ТС]     Работа с классами #10
Цитата Сообщение от 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;
}
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
10.09.2013, 19:54     Работа с классами #11
ninja2, Не void, а void* - это принципиально разные вещи. Суть в том, что хранить можно будет указатели на объекты любых типов.
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
11.09.2013, 13:35  [ТС]     Работа с классами #12
Цитата Сообщение от 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 минут
Тут полюбом какой то приемчик из ООП используется, давайте господа шустрее думаем, очень интересные задачки, неужели никто и не догадался что тут от нас хотят???
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.09.2013, 15:25     Работа с классами
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
zer0mail
2189 / 1872 / 187
Регистрация: 03.07.2012
Сообщений: 6,668
Записей в блоге: 1
11.09.2013, 15:25     Работа с классами #13
Это только некоторым "гурам" кажется, что интересные. Уже погонять начинают
Yandex
Объявления
11.09.2013, 15:25     Работа с классами
Ответ Создать тему
Опции темы

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