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

Создание дерева в родительском классе - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Генератор судоку http://www.cyberforum.ru/cpp/thread90576.html
Маленькая проблемка с программой - в одном из 10 случаев программа зависает. Кому не сложно, прошу проверить и исправить. Вот полный работающий код: #include <iostream> #include <cstdlib>...
C++ Новый стандарт с++ В 2009 году должен быть выйти новый стандарт. Хотелось бы узнать какие новшевства он принес в язык. Стал язык удобнее или нет. И какие компиляторы уже на данный момент поддерживают этот стандарт. ... http://www.cyberforum.ru/cpp/thread90544.html
С++ vs. Visual Studio C++! C++
В чем разница между C++ и Visual Studio C++??
C++ Открытие wav файла
Здравствуйте. мне надо открыть музыкальный файл формата wav и считать информацию в массив из блока data. написала начало функции. но не работает. не находит блоки wav и data вообще. вот программа....
C++ Удаление инфы из дискового файла http://www.cyberforum.ru/cpp/thread90009.html
Есть файл. Этот файл читается и пишется как типизированный (подозреваю, что к делу это не относится), то есть в качестве указателя на буфер юзится указатель на структуру. Надо из файла удалить одну...
C++ Подключение библиотеки Здраствуйте. Как мне подключить библиотеку к проекту только 1 раз. тоесть есть у меня 4 срр файла каждий поключаен набор библиотек //lib.h #pragma once #include <iostream> #include <conio.h>... подробнее

Показать сообщение отдельно
Observat
0 / 0 / 0
Регистрация: 29.01.2010
Сообщений: 5
03.02.2010, 11:55  [ТС]
Данные хранятся на сервере в виде дерева(типа XML, "файловая система, где каталог - полноценный файл с данными", LDAP). В разных ветвях встречаются разные вещи.
Мы знаем узел, начиная от которого идут нужные данные, но внутренняя структура нам неизвестна. Поэтому для загрузки данных используем некий обобщенный метод; создаем класс А.
Каждый узел содержит атрибуты. Некоторые из них мы не используем, некоторые только читаем, другие можем редактировать/удалять/создавать. Мы можем также скрывать некоторые узлы, которые нельзя использовать. Для разных вещей(загруженных деревьев) узлы, атрибуты и их чтение/редактирование/использование/контроль могут отличаться. Создаются классы B1-Bn. Некоторые методы (или их части) одинаковые или их можно сделать одинаковыми без потерь. Такие методы выносим в класс А.
Класс А не может самостоятельно обрабатывать данные, поэтому сделаем его абстрактным.
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
class A
{
public:
    A(char*/string/QString  str) {  loadTree(str);  }
    loadTree(char* root)
    {
        // заполнение данными c сервера
        // Рекурсивно заполняется vector<A*>;
//!    // но объектами (точнее указателями на созданные объекты)
//!    // не типа А, а типа Bx, который и вызвал конструктор класса А
    }
    void method1() =0;
    int method2() =0;
protected:
    ... // данные-атрибуты
    vector<A*>;
};
 
class B1 : public A
{
public:
    B1(char * root) : A(root) {}
    void method1() { ... }
    int method2() { ... }
protected:
// данных нет, они все в классе А
// могут быть только вспомогательные
};
 
void main()
{
  A* mas[2];
  mas[0] = new B1("qwerty");
  mas[1] = new B2("asd");
    ...
    mas[k]->method1();
}
Как сделать то , что отмечено "//!" ?

P.S. Неразвернутая по полочкам задача:
Клиент для LDAP-сервера для удобного добавления/редактирования DHCP, DNS, mail. Сейчас сделано по варианту 2 из первого поста, хочу сделать рефакторинг.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru