С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
1 / 1 / 0
Регистрация: 29.06.2014
Сообщений: 179
1

Полиморфизм с абстрактным классом

30.09.2014, 16:32. Показов 1276. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрий день, нуждаюсь в помощи.

У меня есть абстрактный класс IStudent_Manip и производный класс Student_Manipulator. Хочу сделать указатель с абстрактного класса на производный, но выскакивает ошибка мол конвертирование между ними невозможно. Подскажите пожалуйста где проблема.

C++
1
2
3
4
5
6
7
    IStudent_Manip * True_obj;
    if (*state == 1)
    {
        StudentManipulator obj;
        True_obj =  new StudentManipulator();
 
    }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.09.2014, 16:32
Ответы с готовыми решениями:

Непонятки с абстрактным классом
У нуба возник вопрос :) Вот объявляю я абстрактный Inline класс. Ну под инлайн я имею ввиду, что...

Работа с абстрактным классом
Доброго времени суток! Имеется небольшой класс: #include <irrlicht.h> class EngineInit {...

Работа с абстрактным классом, считывание данных
Здравствуйте, уважаемые форумчане! Пишу программу по следующему заданию: Создать класс...

Создать иерархию наследования с абстрактным базовым классом
Доброго времени суток! Помогите, пожалуйста, сделать: 2) Создать абстрактный базовый класс с...

6
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
30.09.2014, 16:42 2
В приведенном коде ошибок быть не должно, если классы наследуются должным образом.
Могу предположить, что не указан спецификатор наследования.
C++
1
class Student_Manipulator : public IStudent_Manip // public важен
0
1 / 1 / 0
Регистрация: 29.06.2014
Сообщений: 179
30.09.2014, 16:59  [ТС] 3
Спасибо, это помогло, но теперь не могу вызвать методы присутствующие в обеих классах.

C++
1
2
3
4
5
6
7
8
9
10
11
    IStudent_Manip * True_obj;
    if (*state == 1)
    {
        True_obj = new StudentManipulator();
    }
    else
    {
        True_obj = new Binary_Student_Manipulator();
    }
 
    *True_obj.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
30.09.2014, 17:10 4
Цитата Сообщение от IConstructor Посмотреть сообщение
но теперь не могу вызвать методы присутствующие в обеих классах.
Чтобы вызывать тот или иной метод объекта, этот объект (т.е. его статический тип) должен поддерживать данный метод. Если обращаешься через указатель базового класса IStudent_Manip, то только те методы, которые в нем (в базовом классе) есть и будут доступны (интерфейс). Если нужно вызывать специфический метод (которого не было в базовом классе), то нужно осуществить приведение типа. В данном случае через dynamic_cast.
C++
1
2
Binary_Student_Manipulator* bsm = dynamic_cast<Binary_Student_Manipulator*>(True_obj);
if( bsm ) {  // use Binary_Student_Manipulator's methods }
Но я бы рекомендовал для начала как следует ознакомиться с виртуальными функциями, потому что dynamic_cast это не от жизни хорошей.
0
1 / 1 / 0
Регистрация: 29.06.2014
Сообщений: 179
30.09.2014, 17:45  [ТС] 5
В этих классах есть методы, которые находятся в базовом абстрактном классе. Тоесть в базовом абстрактном классе у меня два метода, и они реализованы в наследующих классах, но интерфейсная ссылка(абстрактного класса) их почему-то не видит.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
30.09.2014, 17:47 6
Цитата Сообщение от IConstructor Посмотреть сообщение
но интерфейсная ссылка(абстрактного класса) их почему-то не видит.
Больше кода надо. И что ты понимаешь под "не видит"? Ошибка компиляции или что?
1
1 / 1 / 0
Регистрация: 29.06.2014
Сообщений: 179
30.09.2014, 17:48  [ТС] 7
А.. я уже понял в чем дело.
0
30.09.2014, 17:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.09.2014, 17:48
Помогаю со студенческими работами здесь

Ошибка при работе с абстрактным классом pair
Всем доброго времени суток, стоит задача создать абстрактный класс pair и создать от него...

Наследование и полиморфизм. Задача с классом Ellipsoid
Добрый день) Подскажите, поджалуйста, что по заданию корректно изменить в задаче нужно: На...

Выбор между абстрактным классом, интерфейсом и простым классом
Здравствуйте. Помогите определиться, что следует выбрать в следующей ситуации, а главное почему...

Работа с абстрактным классом
По заданию должен быть один абстрактный-базовый класс и несколько наследников С абстрактными...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru