Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
 Аватар для morphling
19 / 19 / 2
Регистрация: 26.06.2010
Сообщений: 181

Абстракция данных...модули определяющие типы

16.08.2011, 19:17. Показов 2157. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
//---------------------------------------------------------------------------
 
#pragma hdrstop
#include <tchar.h>
#include <dos.h>
//---------------------------------------------------------------------------
#pragma argsused
// абстракция данных
namespace Stack
   {
     struct Rep; //определение раскладки стека
     //находится в другом месте... как понять?
     typedef Rep& stack; // дает имя stack ссылкам на Rep ? как понять(
     stack create();         // создать новый стек
     void destroy(stack s); // удалить стек s
     void push(stack s, char c);
     char pop(stack s);
   }
   // typedef Rep& stack; идея состоит в том что конкретный стек
   //создается как переменная типа Stack::stack а остольный деталии
   //от пользователя скрыты
 
   struct Bad_pop();// переменная встроенного типа???  как это?
 
void f(char c, char k)
   {
 
     Stack::stack s1 = Srack::create(); // создаем 2 новыйх стека
     Stack::stack s2 = Srack::create();
 
     Stack::push(s1, c);
     Stack::push(s2, k);
 
     if (Stack::pop(s1) != c)
        {
          throw Bad_pop();
        }
     if (Stack::pop(s2) != k)
        {
          throw Bad_pop();
        }
     Stack::destroy(s1);
     Stack::destroy(s2);
   }
int _tmain(int argc, _TCHAR* argv[])
{
      char sim = 'u', sim2 = 'p';
    f(sim, sim2);
    sleep(2);
    return 0;
}
//---------------------------------------------------------------------------
что вообще такое абстракция дынных? (своими словами)
что такое пространство имен namespace? и зачем оно нужно....
что за модули определяющие типы?

Добавлено через 51 секунду
опять не компилирует на namespace ошибку выдает
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.08.2011, 19:17
Ответы с готовыми решениями:

Типы данных: есть ли универсальный тип, который может заменить все типы данных в Си?
Добрый вечер! Был бы очень признателен, если бы Вы помогли бы мне понять нижеследующие вопросы: 1. Можете ли на понятным для...

Абстракция данных и решение задач на C++ ?
Как понять Абстракция данных и решение задач на C++ ? void sendRequest(Request request) { if (server-&gt;error() !=...

Абстракция данных. Как реализовать, на примере класса 2D векторов
Собственно, я пытался разделить код методов и их объявления. Сам класс в файле Vector.h, а код методов в Vector.cpp. Когда весь код...

14
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
16.08.2011, 20:05
Абстракция данных - это, грубо говоря, отделение интерфейса от реализации, выделение существенных для вас деталей и отход на второй план несущественных, тонкостей. Т.е. взять, к примеру, вектор (std::vector). Вы можете создать вектор и запихивать туда элементы с помощью метода push_back. При этом вам не нужно задумываться, что при очередном вызове push_back памяти в векторе может не хватить и что необходимо будет каким-то образом расширить память путём перевыделения новой области памяти большего размера, копирования туда элементов из старой памяти и освобождения старой памяти (как вариант, возможны другие решения). Для вас все эти действия - несущественные детали. Существенно же для вас то, что вы вызвали push_back, элемент сохранился в векторе и лежит там спокойнёхонько до следующего обращения.
Таким образом, вы манипулируете не сырыми данными (указатель на массив, размер массива и т.д.), а абстрагируетесь от них и управляете этими сырыми данными на высоком уровне - с помощью интерфейсных методов.
0
Заблокирован
16.08.2011, 20:25
Цитата Сообщение от morphling Посмотреть сообщение
typedef Rep& stack; // дает имя stack ссылкам на Rep ? как понять(
синоним определяется

Цитата Сообщение от morphling Посмотреть сообщение
struct Rep; //определение раскладки стека
//находится в другом месте... как понять?
ну буквально и понимать
Цитата Сообщение от morphling Посмотреть сообщение
опять не компилирует на namespace ошибку выдает
покажи реализацию, посмотрим что там не компилируется, так то вроде правильно выглядит
1
 Аватар для dr.curse
404 / 360 / 36
Регистрация: 11.10.2010
Сообщений: 1,907
16.08.2011, 20:26
извеняюсь за оффтоп но что означает?
C++
1
#pragma hdrstop
я эту строку только в билдере видел
0
Заблокирован
16.08.2011, 20:45
Цитата Сообщение от aram_gyumri Посмотреть сообщение
извеняюсь за оффтоп но что означает?
C++
1
#pragma hdrstop
я эту строку только в билдере видел
Это означает, что выше этой прагмы заголовочные файлы уже откомпилированы.
0
 Аватар для morphling
19 / 19 / 2
Регистрация: 26.06.2010
Сообщений: 181
16.08.2011, 21:22  [ТС]
silent_1991 : спасибо щас понял что это за абстракция)))

после объяснения я понял что в книге даны примеры как можно сделать а не готовые... функции самому надо писать))) мне в прошлом посту об этом сказали.... вот с функциями реализация:
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
//---------------------------------------------------------------------------
 
#pragma hdrstop
 
#include <tchar.h>
#include <iostream.h>
//---------------------------------------------------------------------------
const int max_size = 20;
char v[max_size+1];
int top = 0;
#pragma argsused
namespace Stack
     {
        void push(char sim);
        char pop();
     }
void error(char *st);
void f()
    {
      Stack::push('u');
      if (Stack::pop() != 'u') error("impossible");
    }
int _tmain(int argc, _TCHAR* argv[])
{   f();
    return 0;
}
//---------------------------------------------------------------------------
void push(char sim)
    {
       if (top > max_size)
          {
            cout<<"Стек полон!";
          }else{
                 v[top] = sim;
                 top++;
               }
    }
//---------------------------------------------------------------------------
char pop()
    {
      if (top < 0)
         {
           cout<<"Стек пуст";
         }else{
                top--;
                return v[top];
              }
    }
//---------------------------------------------------------------------------
 void error(char *st)
     {
      cout<<st;
     }
 //---------------------------------------------------------------------------
ошибка при компиляции :
[ILINK32 Error] Error: Unresolved external 'Stack:ush(char)' referenced from C:\DOCUMENTS AND SETTINGS\АДМИНИСТРАТОР\МОИ ДОКУМЕНТЫ\RAD STUDIO\PROJECTS\DEBUG\WIN32\FILE1.OBJ

[ILINK32 Error] Error: Unresolved external 'Stack:op()' referenced from C:\DOCUMENTS AND SETTINGS\АДМИНИСТРАТОР\МОИ ДОКУМЕНТЫ\RAD STUDIO\PROJECTS\DEBUG\WIN32\FILE1.OBJ

[ILINK32 Error] Error: Unable to perform link


вот эти ошибки))
0
Заблокирован
16.08.2011, 21:36
Цитата Сообщение от morphling Посмотреть сообщение
void push(char sim)
stack:ush и так далее
0
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
16.08.2011, 22:09
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
#include <iostream>
#include <stdexcept>
 
namespace Stack
{
    const int max_size = 20;
    char v[max_size];
    int top = 0;
 
    void push(char c)
    {
        if(top == max_size) throw std::runtime_error("stack is full!");
        v[top++] = c;
    }
 
    char pop()
    {
        if(!top) throw std::runtime_error("stack is empty!");
        return v[--top];
    }
}
 
void error(const char* message)
{
    std::cerr << message << '\n';
}
 
void f()
{
    Stack::push('u');
    if(Stack::pop() != 'u') error("impossible");
}
 
 
int main()
{
    f();
    return 0;
}
Добавлено через 3 минуты
Ну, или с использованием прототипов соответственно:
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
#include <iostream>
#include <stdexcept>
 
namespace Stack
{
    const int max_size = 20;
    char v[max_size];
    int top = 0;
 
    void push(char c);
    char pop();
}
 
void error(const char* message);
void f();
 
 
 
//----------------
 
int main()
{
    f();
    return 0;
}
 
//----------------
 
void Stack::push(char c)
{
    if(top == max_size) throw std::runtime_error("stack is full!");
    v[top++] = c;
}
 
char Stack::pop()
{
    if(!top) throw std::runtime_error("stack is empty!");
    return v[--top];
}
 
void error(const char* message)
{
    std::cerr << message << '\n';
}
 
void f()
{
    Stack::push('u');
    if(Stack::pop() != 'u') error("impossible");
}
0
 Аватар для morphling
19 / 19 / 2
Регистрация: 26.06.2010
Сообщений: 181
16.08.2011, 22:35  [ТС]
Цитата Сообщение от rangerx Посмотреть сообщение
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
#include <iostream>
#include <stdexcept>
 
namespace Stack
{
    const int max_size = 20;
    char v[max_size];
    int top = 0;
 
    void push(char c)
    {
        if(top == max_size) throw std::runtime_error("stack is full!");
        v[top++] = c;
    }
 
    char pop()
    {
        if(!top) throw std::runtime_error("stack is empty!");
        return v[--top];
    }
}
 
void error(const char* message)
{
    std::cerr << message << '\n';
}
 
void f()
{
    Stack::push('u');
    if(Stack::pop() != 'u') error("impossible");
}
 
 
int main()
{
    f();
    return 0;
}
Добавлено через 3 минуты
Ну, или с использованием прототипов соответственно:
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
#include <iostream>
#include <stdexcept>
 
namespace Stack
{
    const int max_size = 20;
    char v[max_size];
    int top = 0;
 
    void push(char c);
    char pop();
}
 
void error(const char* message);
void f();
 
 
 
//----------------
 
int main()
{
    f();
    return 0;
}
 
//----------------
 
void Stack::push(char c)
{
    if(top == max_size) throw std::runtime_error("stack is full!");
    v[top++] = c;
}
 
char Stack::pop()
{
    if(!top) throw std::runtime_error("stack is empty!");
    return v[--top];
}
 
void error(const char* message)
{
    std::cerr << message << '\n';
}
 
void f()
{
    Stack::push('u');
    if(Stack::pop() != 'u') error("impossible");
}
[ILINK32 Error] Error: Unresolved external '_main' referenced from D:\C++ BUILDER\LIB\WIN32\RELEASE\C0X32.OBJ

вот ошибка на ваш код ыыы...))

Добавлено через 10 минут
все исправил оказывается при описании функций тоже имя пространств имен надо указывать))) спасибо всем.... еще кто нибудь объяснит заччем нужно это простронство имен?
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
16.08.2011, 22:37
morphling, для исключения конфликта имён. Например, вы захотите написать собственную функцию swap. Но это такая "редкость", что в любой библиотеке будет эта функция. Таким образом, компилятор не сможет понять, вызываете вы свою swap или swap из STL. Однако при добавлении к имени префикса в виде имени пространства имён вы разграничите две функции с одинаковыми именами.
1
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
17.08.2011, 00:11
Цитата Сообщение от morphling Посмотреть сообщение
[ILINK32 Error] Error: Unresolved external '_main' referenced from D:\C++ BUILDER\LIB\WIN32\RELEASE\C0X32.OBJ
вот ошибка на ваш код ыыы...))
У тебя видимо включён unicode, следовательно вместо main должна быть wmain. _tmain автоматически превращается в main, либо wmain в зависимости от того включён unicode или нет.
1
 Аватар для morphling
19 / 19 / 2
Регистрация: 26.06.2010
Сообщений: 181
17.08.2011, 00:57  [ТС]
а как unicode отключить... у меня вот вместо русских букв показывает черт знает что) С++ билдер
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
17.08.2011, 01:02
morphling, смените IDE и читайте книгу дальше
1
 Аватар для morphling
19 / 19 / 2
Регистрация: 26.06.2010
Сообщений: 181
17.08.2011, 01:15  [ТС]
Цитата Сообщение от Maxwe11 Посмотреть сообщение
смените IDE
где его мне искать что бы сменить его? я билдером неделю назад начал пользоваться
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
17.08.2011, 01:21
выберайте тут
Бесплатные среды (IDE) для программирования на С/С++
если остановитесь на Microsoft Visual Studio то берите последнюю версию сдесь
http://www.microsoft.com/visua... pp-express
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.08.2011, 01:21
Помогаю со студенческими работами здесь

Какой формат базы данных DSN Access (атрибуты и типы данных)?
В настройках IIS можно выбирать формат журнала, один из форматов - это DSN Access, то есть события журналируются в базу данных. Так вот,...

Типы данных: чем отличается тип данных int от float?
Всем привет! Помогите пожалуйста, чем отличается тип данных int от float?

Типы данных, которые можно использовать в предложении foreach в качестве поставщика данных
Типы данных, которые можно использовать в предложении foreach в качестве поставщика данных 1 StringBuilder объекты 2 String и...

Типы данных С# для передачи данных через TCP
подскажите пожалуйста какой тип переменной лучше всего использовать в C# для передачи данных через TCP, что бы можно было передать...

Создание базы данных, таблиц, типы данных и триггеры
Здравствуйте. В колледже выдали задание по базам данных. Как создавать базы, таблицы и типы данных через встроенные инструменты - я...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru