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

Невозможно создать экземпляр абстрактного класса. :) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Строки C/C++ http://www.cyberforum.ru/cpp-beginners/thread428057.html
До строк пока что не дошёл, взгляните если не сложно: Задана строка, содержащая целые числа (максимум 20 чисел). Упорядочить числа в строке по возрастанию. У самого есть предположение, но насколько оно правильное - это другое дело.
C++ побитовая запись в файл можно ли записать отдельный бит в файл? http://www.cyberforum.ru/cpp-beginners/thread428051.html
Изобразить ромб C++
Задано целое число. Используя средства стандартного ввода-вывода, изобразить на экране ромб, меньшая диагональ которого равна заданному числу и параллельна оси Ох, а большая в 2 раза длиннее меньшей. со сторонами всё понятно.а вот как изобразить не знаю...
попробовала написать программу C++
#include <iostream> using namespace std; int main() { int I, A, x, y =0; cout << "input x = , I= , A= ";
C++ win api точки входа http://www.cyberforum.ru/cpp-beginners/thread428035.html
меня интересуют названия функция получения точки входа файла получения конца файла (feof не подойдёт) и функция изменения точки входа. всё это запущенное приложение должно применить к другому exe файлу(задание на win api ) собственно подскажите пожалуйста название функция
C++ Помогите с заданием http://s1.ipicture.ru/uploads/20120114/BWTr3yZw.jpg Типа надо прединкремент заменить на постинкремент? подробнее

Показать сообщение отдельно
Akkoks
0 / 0 / 0
Регистрация: 10.06.2011
Сообщений: 31
14.01.2012, 17:30  [ТС]     Невозможно создать экземпляр абстрактного класса. :)
Цитата Сообщение от fridi Посмотреть сообщение
вот подправил вроде все ок должно быть
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
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <dos.h>
#include <fstream>
using namespace std;
const char NONAME[]="NONAME";
const char STRINGNAME[]="String";
const char INTNAME[]="Int";
const char FLOATNAME[]="Float";
 
// Абстрактный класс - родитель классов, которые можно сохранять в коллекции
 
class object
{
public:
        char *className;// имя класса
        int sz2;
        int classUID;// уникальный идентификатор класса
        object(){classUID=0;};
        virtual ~object(){};
        virtual int GetUID() = 0;// получение УИК
        virtual char* GetName() = 0;// получение имени класса
 
        virtual int readbin(ifstream &ff) = 0;// чтение из бинарного файла
        virtual int writebin(ofstream &ff) = 0;// запись в бинарный файл
 
        virtual bool Load(char *buf) = 0;// загрузка из строки
        virtual bool Upload(char *buf) = 0;// выгрузка в строку
 
        virtual int Compar(object *rhs) = 0;// сравнение с другим объектом
 
        virtual void Union(object *rhs) = 0;// объединение с другим объектом
 
        virtual void Show(ostream &os = cout) = 0;// вывод в поток
        object *next,*prev;
};
class String: public object
{
public:
        char *str;      // Массив для хранения строки
        int sz;         // Размерность массива
        String(){};                                                                               // Конструктор по умолчанию
        String(char *s){};                                                                // Конструктор с параметрами
        String(const String &rhs){};                                              // Конструктор копирования
         ~String(){};                              // Деструктор
        void add(const char *ns);                                               // Добавление строки
        virtual int GetUID() {return 0;};// получение УИК
        virtual char* GetName() {return "foo";};// получение имени класса
 
        virtual int readbin(ifstream &ff) {return 0;};// чтение из бинарного файла
        virtual int writebin(ofstream &ff){return 0;};// запись в бинарный файл
 
        virtual bool Load(char *buf) {return 0;};// загрузка из строки
        virtual bool Upload(char *buf) {return 0;};// выгрузка в строку
 
        virtual int Compar(object *rhs) {return 0;};// сравнение с другим объектом
 
        virtual void Union(object *rhs) {};// объединение с другим объектом
 
        virtual void Show(ostream &os = cout) {};// вывод в поток                                                            // Преобразование в строку
        //friend ostream& operator<< (ostream& os,const String& r);     // Потоковый ввод/вывод
    //friend istream& operator>> (istream& is,String& r);
 
};
 
class Int: public object
{
        protected:
        Int *next,*prev;// указатели на следующий и предыдущий элементы списка
public:
        int date;       //поле данных
 
        Int();                                                                          // Конструктор по умолчанию
        Int(int a);                                                             // Конструктор с параметрами
        Int(const Int &rhs);                                            // Конструктор копирования
        virtual ~Int();                         // Деструктор
        virtual void change(int ns);                                    // Изменение строки
        virtual void print();                                   // Вывод
        virtual int readbin(ifstream &ifs);                                             // Чтение и запиcь в двоичный файл
        virtual int write(ofstream &ofs);
        //friend ostream& operator<< (ostream& os,const String& r);     // Потоковый ввод/вывод
        //friend istream& operator>> (istream& is,String& r);
 
};
 
int main()
{
 
  String s("qwerty");
 
 
}











дело в том, что у меня есть шаблонный класс, для которого нужно получать указатель на объект, иначе, в тех строках где T *d (если убрать *) возникает ошибка, что невозможно создать бла бла бла абстрактного класса...
по этому инициализация должна быть String *a;

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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#include "head.h"
 
template <class T> class list
{
   class Elem//объект, который будет хранить данные типов
   {
       public:
         T *data;//поле с данными
         Elem * next;//указатели на следующий и предыдущий элемент
         Elem * prev;
         Elem(){data = 0; next = prev = NULL;}//констурктор
         Elem(T *d):data(d){next = prev = NULL;}//конструктор с параметрами
   };
   int size;//размерность списка
   Elem * head;//указатели на начало и конец списка
   Elem * end;
   public:
      list(){head = end = NULL; size=0;}; //конструктор по умолчанию
      ~list()
      {
          Elem * pt = head;
      while(pt->next!=NULL)
          {
              Elem * t = pt;
              pt = pt->next;
              delete t;
           }
}
void add(T *d)// вставка в конец списка
{
       Elem * t = new Elem(d);
        if ( head == NULL ) 
        {
             head = end = t;
             t->next=NULL;
             cout<<"Insert in head"<<endl;
             size=1;
        }
        else      {
              t->prev = end;
              end->next = t;
              end = t;
              t->next=NULL;
              cout<<"Insert in end"<<endl;
              size++;
        }
}
 
void print()  //вывод списка
{
       Elem * pt = head;
       while(pt->next!=NULL)
       {
            pt->data.print();
            pt = pt->next;
       }
}
void include(int num,T *d)//включение объекта по логическому номеру
{
    try
    {
    if(num<0||num>size-1) throw "Invalid number";
    
    else 
    {
        Elem *t=head,*pt=new Elem(d);
        int i=0;
        do 
        {
            t=t->next;
            i++;
        } while(t!=head && i<num);
 
        pt->prev=t->prev;
        t->prev->next=pt;
        pt->next=t;
        t->prev=pt;
    }
    }
    catch (char *s)
    {
        cout<<s<<endl;
    }
}
void exclude(int num)//исключение объекта из списка по логическому номеру
{
    try
    {
    if(num<0||num>size-1) throw "Invalid number";
    
    else 
    {
        if(num==0)//если первый элемент в списке
        {
            Elem *t=head;
            Elem *tt;
            tt=t->next;
            delete t;
            tt->prev=NULL;
            head=tt;
        }
        if(num==size-1)//если последний элемент в списке
        {
            Elem *t=end;
            Elem *tt;
            tt=t->prev;
            delete t;
            tt->next=NULL;
            end=tt;
        }
        if(num!=0&&num!=size)
        {
        Elem *t=head;
        int i=0;
        do 
        {
            t=t->next;
            i++;
        } while(t!=head && i<num);
 
        t->prev->next=t->next;
        t->next->prev=t->prev;
        delete t;
        }
    }
    }
    catch (char *s)
    {
        cout<<s<<endl;
    }
}
void search(int num) //поиск элемента по логисескому номеру
{
    try
    {
    if(num<0||num>size) throw "Invalid number";
    
    else 
    {
        Elem *t=head;
        int i=0;
        do 
        {
            t=t->next;
            i++;
        } while(t!=head && i<num);
 
        cout <<i<<":"<<; t->data.print(); cout<<endl;
    }
    }
    catch (char *s)
    {
        cout<<s<<endl;
    }
}
};
 
Текущее время: 15:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru