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

Виртуальные функции. Абстрактные классы. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Metal_666_
15 / 15 / 2
Регистрация: 19.10.2009
Сообщений: 187
15.02.2010, 03:07     Виртуальные функции. Абстрактные классы. #1
Есть у меня абстрактный класс
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class DataManager
{
        protected:
                Configuration configuration;
        public:
                DataManager(Configuration config);
                virtual List<Buss> loadBuss() = 0;
                virtual List<Route> loadRoute() = 0;
                virtual List<Reys> loadReys() = 0;
 
                virtual void saveBuss(List<Buss> bussList) = 0;
                virtual void saveRoute(List<Route> routeList) = 0;
                virtual void saveReys(List<Reys> reysList) = 0;
};
от него наследуются 2 подкласса

C++
1
2
3
4
5
class TxtDataManager : public DataManager
{ /*      методы и поля     */}
 
class CsvDataManager : public DataManager
{ /*      методы и поля     */}
а еще есть класс
C++
1
2
3
4
5
6
7
8
9
10
class Storage
{
                Configuration configuration;
                DataManager* manager;
                List<Buss> busList;
                List<Route> routeList;
                List<Reys> reysList;
        public:
                Storage(Configuration config);
};
Как сделать так,чтобы когда я читаю с конфига некоторый формат (txt или csv) мой класс Storage создавал нужный подкласс TxtDataManager или СымDataManager соответственно?
Попробывал вот так написать
C++
1
2
3
4
5
6
Storage::Storage(Configuration config)
{
        configuration = config;
        if(strcmp(configuration.getConfig("format"),"txt") == 0)
                *manager = *TxtDataManager;  
}
но это наверно глупо и нелепо выглядит)Вобщем хэлп!Просто еще не въехал в виртуальные ф-ции а азвтра проект сдавать(

Добавлено через 50 минут
Еще забыл написать что компилятор выкидывает на строчке
C++
1
DataManager* manager;
ошибки:
[C++ Error] storage.h(9): E2303 Type name expected
[C++ Error] storage.h(9): E2139 Declaration missing ;

Добавлено через 1 час 18 минут
Разобрался.Оказалось что он почему то не видел DataManager, хотя я его подключал,создал новый файл,все скопировал и работает(ох уж этот билдер).С указателем тоже разобрался.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.02.2010, 03:07     Виртуальные функции. Абстрактные классы.
Посмотрите здесь:

C++ Абстрактные классы, виртуальные функции
C++ Виртуальные абстрактные базовые классы
C++ Абстрактные классы
Виртуальные функции и классы C++
Абстрактные классы C++
Написать код используя массивы, указатели, виртуальные функции, наследование, классы и т.д C++
C++ Абстрактные классы и чистые виртуальные функции
C++ Абстрактные классы. Виртуальные функции

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Monte-Cristo
 Аватар для Monte-Cristo
2805 / 1370 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
15.02.2010, 10:28     Виртуальные функции. Абстрактные классы. #2
Цитата Сообщение от Metal_666_ Посмотреть сообщение
*manager = *TxtDataManager;
так никто не делает


Цитата Сообщение от Metal_666_ Посмотреть сообщение
Просто еще не въехал в виртуальные ф-ции а азвтра проект сдавать
а по моему ты не въехал в тему указателей вообще

надо примерно так делать:

C++
1
manager = new TxtDataManager();
ну или если CSV:

C++
1
manager = new CsvDataManager();
и не забывать в деструкторе чистить это!
Yandex
Объявления
15.02.2010, 10:28     Виртуальные функции. Абстрактные классы.
Ответ Создать тему
Опции темы

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