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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
morphling
 Аватар для morphling
-9 / 19 / 1
Регистрация: 26.06.2010
Сообщений: 181
16.08.2011, 19:17     Абстракция данных...модули определяющие типы #1
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 ошибку выдает
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.08.2011, 19:17     Абстракция данных...модули определяющие типы
Посмотрите здесь:

C++ типы данных
Типы данных C++
Типы данных C++ C++
Типы данных C++
C++ Абстракция данных и решение задач на C++ ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
16.08.2011, 20:05     Абстракция данных...модули определяющие типы #2
Абстракция данных - это, грубо говоря, отделение интерфейса от реализации, выделение существенных для вас деталей и отход на второй план несущественных, тонкостей. Т.е. взять, к примеру, вектор (std::vector). Вы можете создать вектор и запихивать туда элементы с помощью метода push_back. При этом вам не нужно задумываться, что при очередном вызове push_back памяти в векторе может не хватить и что необходимо будет каким-то образом расширить память путём перевыделения новой области памяти большего размера, копирования туда элементов из старой памяти и освобождения старой памяти (как вариант, возможны другие решения). Для вас все эти действия - несущественные детали. Существенно же для вас то, что вы вызвали push_back, элемент сохранился в векторе и лежит там спокойнёхонько до следующего обращения.
Таким образом, вы манипулируете не сырыми данными (указатель на массив, размер массива и т.д.), а абстрагируетесь от них и управляете этими сырыми данными на высоком уровне - с помощью интерфейсных методов.
LosAngeles
Заблокирован
16.08.2011, 20:25     Абстракция данных...модули определяющие типы #3
Цитата Сообщение от morphling Посмотреть сообщение
typedef Rep& stack; // дает имя stack ссылкам на Rep ? как понять(
синоним определяется

Цитата Сообщение от morphling Посмотреть сообщение
struct Rep; //определение раскладки стека
//находится в другом месте... как понять?
ну буквально и понимать
Цитата Сообщение от morphling Посмотреть сообщение
опять не компилирует на namespace ошибку выдает
покажи реализацию, посмотрим что там не компилируется, так то вроде правильно выглядит
dr.curse
 Аватар для dr.curse
386 / 342 / 16
Регистрация: 11.10.2010
Сообщений: 1,907
16.08.2011, 20:26     Абстракция данных...модули определяющие типы #4
извеняюсь за оффтоп но что означает?
C++
1
#pragma hdrstop
я эту строку только в билдере видел
Сыроежка
Заблокирован
16.08.2011, 20:45     Абстракция данных...модули определяющие типы #5
Цитата Сообщение от aram_gyumri Посмотреть сообщение
извеняюсь за оффтоп но что означает?
C++
1
#pragma hdrstop
я эту строку только в билдере видел
Это означает, что выше этой прагмы заголовочные файлы уже откомпилированы.
morphling
 Аватар для morphling
-9 / 19 / 1
Регистрация: 26.06.2010
Сообщений: 181
16.08.2011, 21:22  [ТС]     Абстракция данных...модули определяющие типы #6
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


вот эти ошибки))
LosAngeles
Заблокирован
16.08.2011, 21:36     Абстракция данных...модули определяющие типы #7
Цитата Сообщение от morphling Посмотреть сообщение
void push(char sim)
stack:ush и так далее
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
16.08.2011, 22:09     Абстракция данных...модули определяющие типы #8
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");
}
morphling
 Аватар для morphling
-9 / 19 / 1
Регистрация: 26.06.2010
Сообщений: 181
16.08.2011, 22:35  [ТС]     Абстракция данных...модули определяющие типы #9
Цитата Сообщение от 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 минут
все исправил оказывается при описании функций тоже имя пространств имен надо указывать))) спасибо всем.... еще кто нибудь объяснит заччем нужно это простронство имен?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
16.08.2011, 22:37     Абстракция данных...модули определяющие типы #10
morphling, для исключения конфликта имён. Например, вы захотите написать собственную функцию swap. Но это такая "редкость", что в любой библиотеке будет эта функция. Таким образом, компилятор не сможет понять, вызываете вы свою swap или swap из STL. Однако при добавлении к имени префикса в виде имени пространства имён вы разграничите две функции с одинаковыми именами.
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
17.08.2011, 00:11     Абстракция данных...модули определяющие типы #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 или нет.
morphling
 Аватар для morphling
-9 / 19 / 1
Регистрация: 26.06.2010
Сообщений: 181
17.08.2011, 00:57  [ТС]     Абстракция данных...модули определяющие типы #12
а как unicode отключить... у меня вот вместо русских букв показывает черт знает что) С++ билдер
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
17.08.2011, 01:02     Абстракция данных...модули определяющие типы #13
morphling, смените IDE и читайте книгу дальше
morphling
 Аватар для morphling
-9 / 19 / 1
Регистрация: 26.06.2010
Сообщений: 181
17.08.2011, 01:15  [ТС]     Абстракция данных...модули определяющие типы #14
Цитата Сообщение от Maxwe11 Посмотреть сообщение
смените IDE
где его мне искать что бы сменить его? я билдером неделю назад начал пользоваться
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.08.2011, 01:21     Абстракция данных...модули определяющие типы
Еще ссылки по теме:

C++ Абстракция данных. Как реализовать, на примере класса 2D векторов
C++ Типы данных
C++ Типы данных

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

Или воспользуйтесь поиском по форуму:
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
17.08.2011, 01:21     Абстракция данных...модули определяющие типы #15
выберайте тут
Бесплатные среды (IDE) для программирования на С/С++
если остановитесь на Microsoft Visual Studio то берите последнюю версию сдесь
http://www.microsoft.com/visualstudi...al-cpp-express
Yandex
Объявления
17.08.2011, 01:21     Абстракция данных...модули определяющие типы
Ответ Создать тему
Опции темы

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