Я новичок в C ++, и я пытался решить эту реализацию фабричного метода, где я пытаюсь найти реализацию с помощью функции make object ниже:
- Извлечение возвращаемого типа для предоставления доступа к созданному объекту в классе Object ниже.
- Создание двух объектов ( Object2 и Object3 ) для данного id
- Пытаюсь быть потокобезопасным.
Я работаю над следующий код:
enum ObjectType {
FO_Object2, FO_Object3
};
class Object {
int ID;
public:
Object(int id) : ID(id) {}
Object(const Object&) = delete;
virtual void printObject() = 0;
static Object* make_object(int id);
};
class Object2: public Object
{
public:
void printObject() {
std::cout << "ID = 2" << std::endl;
}
};
class Object3 : public Object
{
public:
void printObject() {
std::cout << "ID = 3" << std::endl;
}
};
//Factory Method to create objects
Object* Object::make_object(int id)
{
switch (id)
{
case FO_Object2: return new Object2();
case FO_Object3: return new Object3();
default:
return NULL;
}
}
class object_factory
{
public:
object_factory()
{
ObjectType id = FO_Object3;
pObject = Object::make_object(id);
}
~object_factory()
{
if (pObject) {
delete[] pObject;
pObject = NULL;
}
}
Object* getFactory() {
return pObject;
}
private:
Object* pObject;
};
int main()
{
object_factory* pFactory = new object_factory();
Object* pObject = pFactory->getFactory();
pObject->printObject();
return 0;
}
Но, к сожалению, в моем списке ошибок сообщается, что у меня есть следующие ошибки:
E1790 -> на конструктор по умолчанию «Object2» нельзя ссылаться - это является удаленной функцией.
E1790 -> на конструктор по умолчанию «Object3» нельзя ссылаться - это удаленная функция.
C2280 -> 'Object2 :: Object2 (void ) ': попытка сослаться на удаленную функцию
Любой может помочь мне с этой проблемой, спасибо в заранее.