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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
morphling
-9 / 19 / 1
Регистрация: 26.06.2010
Сообщений: 181
#1

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

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

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

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

типы данных - C++
на Си реализовать: (не С++) построить функцию, возвращающую все байты заданного вещественного х в целом виде. т.е. нам например вводят...

Типы Данных - C++
Извиняюсь, за тупой вопрос, но какой самый большой целочисленный тип данных доступный в компиляторе visual c++ express edition 2010, по...

Типы данных C++ - C++
Подскажите какие вещественные и целые типы самые большие и маленькие

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

типы данных - C++
уважаемые программисты, как отвести типу char 2 байта? пишу шахматы, 6 фигур, хочу, чтобы каждый бит отводился для определенной фигуры, +...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 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
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
-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
1931 / 1540 / 141
Регистрация: 31.05.2009
Сообщений: 2,908
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
-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
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
16.08.2011, 22:37     Абстракция данных...модули определяющие типы #10
morphling, для исключения конфликта имён. Например, вы захотите написать собственную функцию swap. Но это такая "редкость", что в любой библиотеке будет эта функция. Таким образом, компилятор не сможет понять, вызываете вы свою swap или swap из STL. Однако при добавлении к имени префикса в виде имени пространства имён вы разграничите две функции с одинаковыми именами.
rangerx
1931 / 1540 / 141
Регистрация: 31.05.2009
Сообщений: 2,908
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
-9 / 19 / 1
Регистрация: 26.06.2010
Сообщений: 181
17.08.2011, 00:57  [ТС]     Абстракция данных...модули определяющие типы #12
а как unicode отключить... у меня вот вместо русских букв показывает черт знает что) С++ билдер
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
17.08.2011, 01:02     Абстракция данных...модули определяющие типы #13
morphling, смените IDE и читайте книгу дальше
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++
Перекопал везде и всюду, может где-то и есть обьяснение по поводу типов данных. Какая разница между следующими типами данных (имеется...

Типы данных - C++
Мне задали в университете лабораторную работу. Написать программу вычисления среднего массивов типа int,float и complex. Функции,...

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

типы данных - C++
int x1, x2; float summa; x1 = 5; x2 = 6; summa = (x1 + x2)/2; cout &lt;&lt; summa &lt;&lt; endl; почему в результате 5, а не...

Типы данных - C++
__int64 Z = pow(a,x); long double Y = 9/Z; cout&lt;&lt;Y //Y = 0 Как вывести подробней? Добавлено через 6 минут И при Y%Z не...


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

Или воспользуйтесь поиском по форуму:
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 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     Абстракция данных...модули определяющие типы
Ответ Создать тему
Опции темы

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