Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Saboteuur
0 / 0 / 0
Регистрация: 27.09.2014
Сообщений: 14
1

Что такое указатель на абстрактный класс?

21.10.2014, 14:11. Просмотров 863. Ответов 9
Метки нет (Все метки)

В задании сказано - Методы класса должны принимать указатель на абстрактный класс , что это значит и как это реализовывается?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.10.2014, 14:11
Ответы с готовыми решениями:

Указатель на бызовый абстрактный класс.
Правильно ли у меня написан "умный" указатель? Напонятно, как можно с помощью...

Что такое хэндлер файла? Что такое файловый указатель?
Что такое хэндлер файла? Что такое файловый указатель?

Скопировать объект, на который ссылается указатель на абстрактный класс
Доброго времени суток. У меня такое задание: написать программу символьного...

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

Что такое абстрактный объект?
Что такое обстрактный объект? Как удалить символ из файла на языке С++?

9
Kastaneda
Jesus loves me
Эксперт С++
4949 / 3026 / 346
Регистрация: 12.12.2009
Сообщений: 7,627
Записей в блоге: 2
Завершенные тесты: 1
21.10.2014, 14:16 2
Лучший ответ Сообщение было отмечено Saboteuur как решение

Решение

Нужно сделать абстрактный класс, а методы должны принимать указатель на него. Похоже предполагается, что от этого абстрактного класса будут наследоваться другие классы. И адреса объектов этих других классов нужно передавать в методы как указатели на абстрактный класс.
1
Saboteuur
0 / 0 / 0
Регистрация: 27.09.2014
Сообщений: 14
21.10.2014, 14:46  [ТС] 3
Если не сложно можете объяснить что как связаны между собой классы Список,IObject,StringObject и DoubleObject

Реализовать класс-контейнер «Односвязный список (List)», состоящий из объектов произвольного (но одного и того же) типа. Методы класса должны принимать указатель на абстрактный класс IObject. В классе IObject необходимо определить чисто виртуальные функции bool equal(IObject*) – для сравнения объектов на равенство и IObject* clone() – для создания копии объекта при добавлении в контейнер. Класс IObject должен быть базовым для классов различных типов объектов, которые может содержать список (DoubleObject, StringObject). Все эти классы должны переопределять чисто виртуальные функции класса IObject. Реализовать в классе «Список» несколько конструкторов, в том числе конструктор копирования, методы для поиска элемента, добавления элемента в список, удаления элемента из списка. Проиллюстрировать работу с классом «Список» для хранения различных типов объектов.
0
Kastaneda
Jesus loves me
Эксперт С++
4949 / 3026 / 346
Регистрация: 12.12.2009
Сообщений: 7,627
Записей в блоге: 2
Завершенные тесты: 1
21.10.2014, 14:58 4
Лучший ответ Сообщение было отмечено Saboteuur как решение

Решение

Создаем абстрактный класс IObject. От него наследуем DoubleObject и StringObject. Определяем в них метод clone() (который объявлен как чистовиртуальный в IObject).
В классе List метод добавления элемента похоже должен быть примерно таким

C++
1
2
3
4
5
6
7
8
9
10
template <typename T>
class List
{
public:
    void add(IObject *ptr)
    {
        T ob = ptr->clone();
        // добавляем объект ob в список
    }
};
Элементы добавляем например так

C++
1
2
3
4
5
List<StringObject> list;
 
StringObject ob;
 
list.add(&ob);
1
Saboteuur
0 / 0 / 0
Регистрация: 27.09.2014
Сообщений: 14
21.10.2014, 15:01  [ТС] 5
Спасибо, только это все нужно организовать без применения шаблонов
0
Kastaneda
Jesus loves me
Эксперт С++
4949 / 3026 / 346
Регистрация: 12.12.2009
Сообщений: 7,627
Записей в блоге: 2
Завершенные тесты: 1
21.10.2014, 15:09 6
Лучший ответ Сообщение было отмечено Saboteuur как решение

Решение

А, я не обратил внимание, что clone() возвращает указатель. Тогда шаблоны не нужны, да.
Кривое какое-то задание - либо возвращать указатель на локальный объект (который очень скоро будет указывать на мусор), либо на динамическую память, тогда в деструкторе List'а нужно удалять все объекты через delete, что тоже не есть хорошо с точки зрения хорошего тона.
1
Saboteuur
0 / 0 / 0
Регистрация: 27.09.2014
Сообщений: 14
21.10.2014, 15:45  [ТС] 7
Я не могу понять как обращаться к методам DoubleObject и StringObject из класса List при том что у нас в IObject определены только два метода, и не должно быть всех остальных методов(поиска,удаления элемента)
0
Kastaneda
Jesus loves me
Эксперт С++
4949 / 3026 / 346
Регистрация: 12.12.2009
Сообщений: 7,627
Записей в блоге: 2
Завершенные тесты: 1
21.10.2014, 16:14 8
Лучший ответ Сообщение было отмечено Saboteuur как решение

Решение

Цитата Сообщение от Saboteuur Посмотреть сообщение
и не должно быть всех остальных методов(поиска,удаления элемента)
Эти методы должны быть в классе List.
Цитата Сообщение от Saboteuur Посмотреть сообщение
как обращаться к методам DoubleObject и StringObject из класса List при том что у нас в IObject определены только два метода
Внутри List'а нужны только эти два метода, другие не нужны. Только не могу придумать как может быть полезен equal внутри списка, объект по-любому добавляется, даже если такой уже есть. Его работу можно отдельно продемонстрировать.
1
Saboteuur
0 / 0 / 0
Регистрация: 27.09.2014
Сообщений: 14
21.10.2014, 16:43  [ТС] 9
В классе List в структуре
struct Node{
T data;
Node*next;
};
что должно стоять вместо T и как все это организовать без шаблонов? (может нужно использовать RTTI)
0
ForEveR
В астрале
Эксперт С++
7997 / 4755 / 652
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
21.10.2014, 16:50 10
Лучший ответ Сообщение было отмечено Saboteuur как решение

Решение

Saboteuur, IObject* очевидно.
1
21.10.2014, 16:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.10.2014, 16:50

Создать абстрактный тип данных - класс вектор, который имеет указатель на long, число элементов и переменную состояния
Помогите пожалуйста, нужно написать код на с++ Создать абстрактный тип данных...

Что такое указатель на член класса?
Что такое указатель на член класса?

Указатель на ссылку или что это такое?
void add(char aData, Branch *&amp;aBranch); Речь об аргументе aBranch. Как это...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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