Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
#1

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

09.09.2013, 13:56. Просмотров 787. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.09.2013, 13:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Работа с классами (C++):

Работа с классами. - C++
Или это задача такая лёгкая (на экзамене будет), или я чего-то не понимаю. В классе Pair может содержаться только 2 числа (ну и 2 метода не...

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

Работа с классами - C++
Наверно классическая задачка для тех, кто только начинает изучать классы. Есть группы и студенты. Проблема в том, что до меня не доходит,...

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

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

Работа с классами - C++
Имеется заголовочный файл В нем создаю два класса Vector и MyCamera. class Vector { public: float x,y,z; }; ...

12
monolit
186 / 185 / 22
Регистрация: 24.03.2011
Сообщений: 669
Завершенные тесты: 1
09.09.2013, 13:57 #2
Цитата Сообщение от ninja2 Посмотреть сообщение
Хорошо бы если б кто то написал рабочий прототип
Да, это хорошо...
0
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
09.09.2013, 14:05  [ТС] #3
Цитата Сообщение от monolit Посмотреть сообщение
Да, это хорошо...
Ну так попробуй мб у тебя получится что то сделать?

Это задание для новичков в С++, от попробуй справишься с ним или нет, как говорится попытка не пытка !!!
0
ninja2
231 / 187 / 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 для строк. В принципе под условие подходит.

Мб у вас есть другие варианты?
0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 832
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 секунд
хотя в учебнике Страуструпа такое не редкость
1
ninja2
231 / 187 / 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;
}
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
10.09.2013, 16:01 #7
ninja2,
Реализуйте стек котов посредством Cat_object
Что-то я не наблюдаю стека котов.
0
ninja2
231 / 187 / 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 секунд
Мб хоть кто то просто своими словами объяснить, что хотят что бы мы сделали?
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
10.09.2013, 18:17 #9
ninja2, Аргумент функции должен быть void* (вашем случае arg должен быть typedef не на string, а на void), тогда все станет понятно.
0
ninja2
231 / 187 / 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;
}
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
10.09.2013, 19:54 #11
ninja2, Не void, а void* - это принципиально разные вещи. Суть в том, что хранить можно будет указатели на объекты любых типов.
0
ninja2
231 / 187 / 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 минут
Тут полюбом какой то приемчик из ООП используется, давайте господа шустрее думаем, очень интересные задачки, неужели никто и не догадался что тут от нас хотят???
0
zer0mail
2374 / 2004 / 199
Регистрация: 03.07.2012
Сообщений: 7,196
Записей в блоге: 1
11.09.2013, 15:25 #13
Это только некоторым "гурам" кажется, что интересные. Уже погонять начинают
0
11.09.2013, 15:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.09.2013, 15:25
Привет! Вот еще темы с ответами:

Работа с классами - C++
Есть класс Person, который описывает имя, возраст, телефон и пол : Потом надо поменять какую-нибудь информацию, например имя, что у меня...

Работа с классами - C++
Программа работает некорректно... не выводит студентов введенных с клавиатуры.... :( выводит только и сравнивает только этих: ...

Работа с классами в С++ - C++
Доброго всем дня.У меня возникла проблема с освоением языка C++ , сейчас пишу курсовую на этом языке, и ещё не совсем всё понимаю, но книги...

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


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru