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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Stack со сменой представления http://www.cyberforum.ru/cpp-beginners/thread950742.html
Здорова господа!!! Есть задачка: "Напишите класс Stack, для которого можно сменить представление на стадии выполнения программы. Подсказка: "Любую проблему можно решить введя еще один уровень косвенности" " Тут не понятно что нам нужно сделать. Рассмотрим просто теоретически, допустим есть у нас класс Stack и нам что нужно от него по создавать производные классы допустим А и допустим B....
C++ Нужен кусок кода Привет всем, даже не знаю сюда ли обратился.....В общем нужен код который выполняется с момента нажатия в браузере например мозиллы CTRL+U. Где мне его взять? Если у кого есть напишите пожалуйста! Думаю я что там не так уж и много написано ). Ну или просто подскажите как выудить исходный код страницы, как это делается? http://www.cyberforum.ru/cpp-beginners/thread950736.html
C++ Работа с com port
подскажите пожалуйста!! написал программку, отправляет запрос на устройство пакет данных (без контрольной суммы), должен придти ответ и записаться в массив!порт открывается, отправляю данные, НЕ КОРРЕКТНО работает readfile() Не пойму в чем ошибка () #include <windows.h> #include <iostream> using namespace std; HANDLE hCom;
Дана строка до точки, группа символов в которой между пробелами считается словом, знаки препинания от слова пробелом не отделяются C++
Дано некоторое число. Вставить его перед каждым восклицательным знаком. все числовые данные вводятся с клавиатуры,и если можно с пояснениями как работает программа и что какой цикл в ней выполняет,заранее спасибо)
C++ Необходимо написать и отладить две программы в среде Borland C++ 3.1. Первая программа должна сформировать двоичный файл. Вторая – считать данные из э http://www.cyberforum.ru/cpp-beginners/thread950714.html
Создать двоичный файл и записать в него n целых чисел. Из файла сформировать массив, записав в него только ненулевые компоненты, находящиеся после максимального элемента. все числовые данные вводятся с клавиатуры,и если можно с пояснениями как работает программа и что какой цикл в ней выполняет,заранее спасибо)
C++ Необходимо написать и отладить программу в среде Borland C++ 3.1 по заданному варианту с обязательным применением динамических массивов и функций Упорядочить элементы вещественного массива следующим образом: по возрастанию элементы, расположенные в массиве до минимального, по убыванию элементы, расположенные после максимального. Создать функции для сортировки массива и определения номеров максимального и минимального элементов. все числовые данные вводятся с клавиатуры,и если можно с пояснениями как работает программа и что какой цикл... подробнее

Показать сообщение отдельно
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
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 минут
Тут полюбом какой то приемчик из ООП используется, давайте господа шустрее думаем, очень интересные задачки, неужели никто и не догадался что тут от нас хотят???
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru