490 / 286 / 129
Регистрация: 30.10.2018
Сообщений: 1,309

Создать екземпляр из абстрактного класса

05.12.2019, 22:44. Показов 5096. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем, мне нужно в функции получить объект абстрактного класса, и создать новый объект этого же типа, но не понимаю как это сделать.

Вот минимальный пример:
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
class Base
{
public:
    virtual void f() = 0;
};
 
class Child : public Base
{
public:
    void f() override
    {
 
    }
};
 
void func(const Base& base)
{
    Base* b = new Base(&base); // ошибка
}
 
int main(int argc, char* argv[])
{
    Child c;
    Base *b = &c;
    func(*b);
    return 0;
}
Мне нужно потом этим b оперировать. Тут b локальная, но в моем примере она на самом деле выходит за границы функции, выходит простой указатель на & не будет работать.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.12.2019, 22:44
Ответы с готовыми решениями:

Невозможно создать экземпляр абстрактного класса
Делаю курсовик, сейчас на начальной стадии (а как же еще к концу сессии :D). Код, который я сейчас покажу еще "сырой", а точнее...

Не получается создать экземпляр абстрактного класса
в общем я очень тупой, буду благодарен за умные советы, имеется класс object и наследуемые от него triangle и uravn вот фрагмент из мэйна ...

Не могу создать дочку абстрактного класса
Следующий код на MS Visual C++ 2010 даёт ошибку error C2259: 'IntValue' : cannot instantiate abstract class: #include <iostream>...

24
490 / 286 / 129
Регистрация: 30.10.2018
Сообщений: 1,309
06.12.2019, 20:03  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от hoggy Посмотреть сообщение
- передача данных по значению
- передача данных по ссылке
- передача данных по указателю
примерно понимаю, по значению это по копии изначального значения, по ссылке это передает область памяти, а по указателю это передает указатель на область памяти.

Ваш код полностью описывает решения проблемы, но только я же не могу хранить значения абстрактного класса (например в контейнере), вот я и решил хранить указатель, т.е. реализовав паттерн "прототип" (виртуальный конструктор) и работать с ним.

Но все таки, я узнал, что можно легко работать с екземпляром абстрактного класса переданным не по указателю. Ранее я думал что абстрактный класс может передаваться только по указателю.
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
06.12.2019, 20:13
Цитата Сообщение от kitsoRik Посмотреть сообщение
Но все таки, я узнал, что можно легко работать с екземпляром абстрактного класса переданным не по указателю.
с экземпляром абстрактного класса вообще работать нельзя. нельзя создать экземпляр абстрактного класса по его определению.
Цитата Сообщение от kitsoRik Посмотреть сообщение
Ранее я думал что абстрактный класс может передаваться только по указателю.
классы вообще никуда не передаются. класс это лишь описание экземпляра, который будет создан на основе этого класса
1
490 / 286 / 129
Регистрация: 30.10.2018
Сообщений: 1,309
06.12.2019, 20:36  [ТС]
Цитата Сообщение от Undisputed Посмотреть сообщение
с экземпляром абстрактного класса вообще работать нельзя. нельзя создать экземпляр абстрактного класса по его определению
Не с созданным экземпляром, а с экземпляром переданным аргументом.
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
06.12.2019, 20:37
kitsoRik,
Так что бы передать экземпляр, надо его сначала создать.
Если не создавать экземпляр, то что передавать то будете?
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
06.12.2019, 21:05
Цитата Сообщение от Undisputed Посмотреть сообщение
Так что бы передать экземпляр, надо его сначала создать.
Если не создавать экземпляр, то что передавать то будете?
С одного раза не выйдет. Но если быть точным, то речь была о указателе и/или ссылке на объект абстрактного класса. Такова трагедия плохой терминологии. Указателей на классы не бывает. Бывают указатели на объект. Однако не бывает объектов абстрактных классов, а указатели на них - обычное дело. Конечно, собака зарыта в подобъекте на который может ссылаться указатель на могилу собаки. И ссылка может. Это единственный случай, когда ссылка может ссылаться на объект которого нет. Она ссылается на подобъект. Тут без практики трудно разобрать. Особенно когда пытаешься отстаивать свою позицию утверждениями типа: - "Я и сам так думал".
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.12.2019, 21:05

Невозможно создать экземпляр абстрактного класса
work.cpp #include "student.h" #include <iostream> #include <conio.h> #include <stdlib.h> #include <windows.h> #include...

Создать новый объект-наследник абстрактного класса
Приветствую, друзья! У нас есть абстрактный класс AbstractClass и его наследники child1 и child2. В массиве у нас есть несколько...

Не получается создать объект унаследованный от абстрактного класса
Здравствуйте! Нужна помощь с виртуальными функциями, в теории понимаю что это, а вот с реализацией что-то совсем не получается. ...

Ошибка: невозможно создать объект абстрактного класса
программа для заменны слова в файле, на введенное с клавы слово!реализовать нужно через интерфейс! ошибка в строчке Text edit; не...

error C2259: last: невозможно создать экземпляр абстрактного класса
Только начала изучать абстрактные классы, и сразу же проблемы. error C2259: last: невозможно создать экземпляр абстрактного класса. Не знаю...


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

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

Новые блоги и статьи
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru