我是一个C++的初学者,我试图解决工厂方法的实现,我试图寻找与funcion的实现。作物 下面是。
我正在处理下面的代码。
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)': 试图引用一个被删除的函数。
谁能帮我解决这个问题,先谢谢了。
这里是一个纠正的例子(据我了解,你想实现什么)。请参阅代码注释,澄清为什么东西在哪里改变。很多东西都需要使核心更加强大(例如在基类中使用ObjectType)。
#include <iostream>
enum ObjectType {
FO_Object2 = 2,
FO_Object3 = 3
};
class Object {
public:
int ID; // ID must be public so that inherited class can access it. Otherwise create getter for ID
Object(int id) : ID(id) {};
Object(const Object&) = delete;
virtual void printObject() = 0;
static Object* make_object(int id);
};
class Object2: public Object
{
public:
Object2():Object(2) {}; // specifically instanciate a base class whose id is 2
void printObject() {
std::cout << "ID = "<< ID << std::endl;
}
};
class Object3 : public Object
{
public:
Object3():Object(3) {}; // specifically instanciate a base class whose id is 3
void printObject() {
std::cout << "ID = "<< ID << 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;
}