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

Абстрактный класс и использование деструктора - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ ООП + полиморфизм = wtf? http://www.cyberforum.ru/cpp-beginners/thread345905.html
Есть: Класс A - отец Класс Б - дочерний Класс Ц - дочерный, наследуеться от А(сестра Б) Есть массив типа А, с названием Mass. Он хранит в себе объекты классов Б и Ц. в классе Б есть функция F(). в классе Ц есть функция F() (отличающаяся функционалом).
C++ Сортировка динамических структур методом шелла Дайте пример сортировки динамических структур методом шелла... http://www.cyberforum.ru/cpp-beginners/thread345904.html
C++ Степень двойки
Изучаю программирование. Попытался решить известную задачу. Программа компилируется, но если ввести к примеру 8 она выдает "no". В чем я ошибся? #include<iostream> using namespace std; int main() { int n,k; int flag=false; cout<<"enter a number "; cin>>n;
C++ Вывод массива.
Программа работает, но код... запутаться можно. Есть ли способы попроще? Заранее спасибо. #include <iostream> #include <ctime> using namespace std; int main () { int mass={2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
C++ friend не видит приватные поля http://www.cyberforum.ru/cpp-beginners/thread345860.html
Всем привет. Возникла проблема. Есть такой header #include <windows.h> #include <windowsx.h> class Intercept; class Dot { private: FLOAT X,Y,Z;
C++ Помогите с компилятором Вечер добрый... Помогите советом. Не могу скопилировать программу. Использую для этого Dev C++. Когда пробую компилировать, выходит куча ошибок. Мол не найдены такие то сякие библиотеки и так далее.. Как можно решить эту проблему? Может использовать какой нибудь другой компилятор? Чем пользуются профессионалы? подробнее

Показать сообщение отдельно
Den4ik
0 / 0 / 0
Регистрация: 24.08.2011
Сообщений: 42
28.08.2011, 10:20  [ТС]     Абстрактный класс и использование деструктора
Ну а если убрать из абстракного класс динамические вектора и сделать так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
template <class Vertex, class Edge> class LGraph: public ABCG <Vertex, Edge> 
{
private: 
        vector <Vertex *> v;
        vector <Edge *> e;
        vector<list<Edge *>> Adjlist;
        bool directed;
        int cnt_v, cnt_e;
public: 
        LGraph()
        {
                cnt_v = 0; cnt_e = 0;
                directed = false;
        };
Как я понял деструктор и не нужен будет.


И в векторах должны быть указатели на элементы.

Добавлено через 2 часа 5 минут
Хотя в абстрактном классе нужны вектора(не динамические) так как есть метод с помощью которого можно изменить представление(Л или М граф)
C++
1
2
3
4
5
6
7
8
9
template <class Vertex, class Edge> class ABCG
{
protected:
    vector <Vertex *> v;
    vector <Edge *> e;
public:
    virtual ~ABCG (){};
virtual void fromAbstract(vector<Vertex *> v, vector<Edge *> e, bool d) = 0; //ОК
};
в классе М-графа переоределен так.
C++
1
2
3
4
5
6
7
8
9
10
11
void fromAbstract(vector <Vertex *> v, vector <Edge *> e, bool d)
    {
        this->v.clear();
        this->e.clear();
        this->directed = d;
        matrix.clear();
        for(unsigned int i = 0; i < v.size(); i++)
            InsertV(v.at(i));
        for(unsigned int i = 0; i < e.size(); i++)
            InsertE(e.at(i)->from, e.at(i)->to);
    };
В Л так же

А в простом графе вызывается в двух методах меняющих представление графа
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
void ToListGraph()                  //преобразует граф к L- графу,
    {
        if(abstr->Dense() == LGRAPH) return;
        vector<Vertex*> v = abstr->getVertexesVector();
        for(vector<Vertex*>::iterator it = v.begin();it != v.end(); it++)
                (*it)->index = -1;
        vector<Edge *> e = abstr->getEdgesVector();
        for(typename vector<Edge*>::iterator it = e.begin(); it != e.end(); it++) (*it)->index = -1;
        bool d = abstr->Directed();
        abstr = new LGraph<Vertex, Edge>(0, d);
        abstr->fromAbstract(v, e, d);
    //  delete v, e;
    };                              
    void ToMatrixGraph()                 //преобразует граф к M- графу,
    {
        if(abstr->Dense() == MGRAPH) return;
        vector<Vertex*> v = abstr->getVertexesVector();
        for(vector<Vertex*>::iterator it = v.begin(); it != v.end(); it++) (*it)->index = -1;
        vector<Edge *> e = abstr->getEdgesVector();
        for(typename vector<Edge*>::iterator it = e.begin(); it != e.end(); it++) (*it)->index = -1;
        bool d = abstr->Directed();
        abstr = new MGraph<Vertex, Edge>(0, d);
        abstr->fromAbstract(v, e, d);
        //delete v, e;
    };
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru