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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
mir_zol
0 / 0 / 0
Регистрация: 03.12.2012
Сообщений: 9
#1

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

03.12.2012, 01:21. Просмотров 1435. Ответов 5
Метки нет (Все метки)

Есть некий абстрактный базовый класс . Мы знаем , что от этого базового класса будет образовано несколько конкретных производных классов .Они будут реализововаться отдельно(про них мы ничего не знаем и с ними работать не можем ) .Нужно написать функцию , которая получает указатель на базовый класс (которому указывает на один из наших производный ) , и создает объект производного класса ,а затем возвращает указатель на базовый класс которому присвоен производный .
Пробовал через шаблоны , не получилось , может быть что-нибудь не так сделал , думаю нельзя ли как то это реализовать с помощью typeid , в частности нельзя ли как-то имея type_info создать объект этого класса.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2012, 01:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Создание объекта произвольного класса по указателю на базовый класс (C++):

Указателю на базовый класс присвоить адрес производного класса - C++
class Point { public: Point(float a=0, float b=0) { x=a; y=b; } protected: float x; float y; };

Присвоение указателю на базовый класс адреса производного класса - C++
Когда наследую как public,всё норм,как private - ошибка. Как сделать тогда,чтобы открылся конструктор? Base :: Base(); Не помогает ...

Создание объекта через указатель на базовый абстрактный класс - C++
Есть абстрактный класс, от него наследуется 3 класса. В программе предусмотрено создание нового объекта(добавление клиента страховой...

Как удалить объект по указателю на базовый класс? - C++
Допустим есть несколько классов: // абстрактный класс - введен для управления наследниками class A{ ... } // рабочий класс...

Класс: как обратиться к методу производного класса через итератор на базовый класс? - C++
Есть абстрактный и два порожденных. Хочу создать например list<Base*> list1; затем добавляю себе в список: ...

Передача в контейнер объекта через указатель на базовый класс - C++
Передаю в stl контейнер list указатель на производный класс, предварительно приведя его к типу производного класса - программа вылетает.В...

5
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
03.12.2012, 01:32 #2
Может быть нужна фабрика?
0
mir_zol
0 / 0 / 0
Регистрация: 03.12.2012
Сообщений: 9
03.12.2012, 01:37  [ТС] #3
Цитата Сообщение от I.M. Посмотреть сообщение
Может быть нужна фабрика?
Извините , я вас не понял , не знаю , что это означает на сленге , не понял вас .
0
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
03.12.2012, 01:40 #4
Это не совсем сленг. Если совсем упрощенно, то фабрика выглядит так:
C++
1
2
3
4
5
6
7
8
9
base* factory(int i_type)
{
   switch(i_type)
   {
   case 0: return new derived1();
   case 1: return new derived2();
   default: return 0;
   }
}
0
mir_zol
0 / 0 / 0
Регистрация: 03.12.2012
Сообщений: 9
03.12.2012, 01:45  [ТС] #5
Да , но проблема в том , что мы не знаем ни количество типов , ни их имен , вот как реализовать фабрику в таком случае?
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
03.12.2012, 02:38 #6
У вас должен быть задан явно кто-то, кто знает, что за класс надо создавать и как именно его создавать. Вот у вас "создаёт объект производного класса". Как именно создаёт? Каким конструктором? Кто-то должен это знать, и это точно не базовый класс или какая-то левая функция. Это проблемы ж того настоящего объекта, на который указывает указатель. Сделайте эту функцию виртуальным методом базового класса, вызывайте её через тот указатель на базовый класс, который получили, а производные пусть уже реализовывают её так, как им надо.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2012, 02:38
Привет! Вот еще темы с ответами:

Создать копию объекта производного класса зная указатель на базовый - C++
Добрый день! Вопрос в следующем... Возможно ли создать копию объекта производного класса зная указатель на базовый класс? У меня получился...

Вызов метода производного класса через указатель на базовый класс - C++
Всем привет ! Подскажите почему , при выполнении строки 45 я получаю ошибку ? А именно при выполнении выражения c->fnz() ...

Базовый класс Deposit и три класса-наследника (банковские вклады) - C++
Здравствуйте. История такова: есть базовый класс Deposit и три класса-наследника (банковские вклады), в них же переопределенная виртуальная...

Как при помощи указателя на базовый класс обратится к полю наследуемого класса? - C++
Всем привет! столкнулся с такой проблемой. У меня есть массив указателей на базовый виртуальный класс,и например я присваиваю указателю на...


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

Или воспользуйтесь поиском по форуму:
6
Yandex
Объявления
03.12.2012, 02:38
Ответ Создать тему
Опции темы

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