Выбор класса при создании объекта

351
10 мая 2017, 09:40

Есть абстрактный класс К, на основе которого (наследование) созданы три других класса К1, К2, К3. Создаваемый в программе объект О должен быть создан как объект одного из классов (К1, К2, К3) в зависимости от выбора пользователя.

Вопрос: как это должно выглядеть? Я пытался через switch, внутри которого объект О создается в зависимости от выбора пользователя, но Visual Studio такой вариант создания объектов считает "неопределенным" (выдает ошибки). Еще пытался создать объект О в классе К1, а в switch-е при необходимости его убивать и пересоздавать, но снова мимо...

Answer 1

Жалко, что Вы не привели код, который выдает ошибки, потому что идея, в общем-то, правильная.

K* create(int i) {
    switch (i) {
        case 1: return new K1;
        case 2: return new K2;
        case 3: return new K3;
    }
}

Предположу, что Вы пытались использовать передачу по значению вместо указателя.

В предложенном варианте нужно не забывать освобождать выделенную память после того, как созданный объект перестает быть нужным. В современном c++ имеет смысл в подобных ситуациях использовать умные указатели, в частности std::unique_ptr.

READ ALSO
Ошибка модуля USB Electron JS

Ошибка модуля USB Electron JS

Uncaught Error: A dynamic link library (DLL) initialization routine failed\?\D:\JN\NODEELECTRON\node_modules\escpos\node_modules\usb\src\binding\usb_bindings

383
Взятие подстроки,

Взятие подстроки,

Из кода ниже изымаю подстроку потом вывожу результат в alertЖелаю в одном сообщение выводить оригинал + обработанный результат

206
Get-запрос из JavaScript

Get-запрос из JavaScript

Как в JS функции вызвать GET-запросЯ хочу перейти в сервлет по URL

483
не получается решить задачу в javascript

не получается решить задачу в javascript

Задача: Все минимальные и максимальные значение поменять местами a = [5,7,1,2,7]; b = [2,8,1,1,5];

316