Конструктор дочернего класса в С++

197
27 августа 2018, 09:20

Конструктор базового абстрактного класса выглядит так:

Object(std::shared_ptr<b2World>& world, const FPoint& pos, const char* nameText, 
    float density, float restitution, TypeShape type);

Конструктор дочернего класса выглядит так:

Star(std::shared_ptr<b2World>& world, const FPoint& pos, const char* nameText,
    float density, float restitution, Node::TypeShape type);

Вопрос: можно ли написать в дочернем классе что-то подобное:

Star(Object* object);

Компилятор ругается при инициализации объекта дочернего класса объектом абстрактного класса. А не хочется постоянно вводить в дочерние классы параметры базового.

Answer 1

Давайте я попробую угадать что вам надо.

Вы хотите создать объект Start на основе имеющегося объекта Object? Тогда вам надо нормально описать конструктор Start

Start::Start(Object * object) // <- тут очень странно почему по указателю
    : Object(*object)
{
}
Answer 2

Для этого вам понадобится соответствующий конструктор в наследнике и конструктор копирования в родителе (он есть по умолчанию). Будет выглядеть как-то так:

class Alfa {
    public:
        Alfa (int a, int b) {};
};
class Beta : public Alfa {
    public:
        Beta (int a, int b) : Alfa {a, b} {};
        Beta (Alfa &a) : Alfa {a} {};
};

Если все-таки хотите использовать указатель, то нужно будет его разыменовать перед инициализацией родительского класса:

 Beta (Alfa *a) : Alfa {*a} {};
READ ALSO
Ошибка ветвления в шаблонной функции

Ошибка ветвления в шаблонной функции

Пишу функцию преобразования матрицы смежности в список смежности (для графов)Т

182
Изменить значение, но не отсылать сигнал об изменении

Изменить значение, но не отсылать сигнал об изменении

Возможно ли изменить значение QSlider но при этом сделать так, что бы сигнал об изменении не был отправлен в определенном случае?

169
Lambda + shared_ptr

Lambda + shared_ptr

Вот пример:

191
Проблема с записью в файл символов CR и LF

Проблема с записью в файл символов CR и LF

Я считываю побайтно в бинарном режиме файл и записываю в другойПри записи назад в файл если в первом файле будет символ CR программа запишет...

237