指向类名的指针数组
C++ Array of pointers to class names
我希望能够保持类名称的数组,并简单地传递一个索引到一个函数,这将创建一个特定类的实例。我有内存限制,所以我不想简单地创建一个对象数组。
下面是我最具描述性的伪代码:
类:
class Shape
{
public:
Shape();
};
class Square : public Shape
{
public:
Square();
};
class Triangle : public Shape
{
public:
Triangle();
};
主:
int main()
{
pointerToShapeClass arrayOfShapes[2]; // incorrect syntax - but
arrayOfShapes[0] = pointerToSquareClass; // how would i do this?
arrayOfShapes[1] = pointerToTriangleClass;
cin << myNumber;
// Depending on input, create instance of class corresponding to array index
if (myNumber == 0) { // create Square instance }
if (myNumber == 1) { // create Triangle instance }
return 0;
}
如果这让你困惑,我可以试着解释一下。提前感谢!
编辑:实际上,我认为我只需要一个指向类的指针,而不需要实际实例化该类。
听起来你想要某种工厂:
class Shape
{
public:
Shape();
static Shape* create(int id);
};
Shape* Shape::create(int id) {
switch (id) {
case 0: return new Square();
case 1: return new Triangle();
}
return NULL;
}
然后当您想要创建给定用户输入的特定Shape
时,您可以这样做:
int myNumber;
cin >> myNumber;
Shape* shape = Shape::create(myNumber);
这是它最简单的形式。但是,我建议让create
函数返回一个std::unique_ptr<Shape>
,而不是一个原始指针。我还将设置静态常量来表示不同的id。
class Shape
{
public:
Shape();
static std::unique_ptr<Shape> create(int id);
enum class Id { Square = 0, Triangle = 1 };
};
std::unique_ptr<Shape> Shape::create(Shape::Id id) {
switch (id) {
case Shape::Id::Square: return new Square();
case Shape::Id::Triangle: return new Triangle();
}
return nullptr;
}
试试这个:
int main()
{
std::vector<Shape*> shapes;
cin << myNumber;
// Depending on input, create instance of class corresponding to array index
if (myNumber == 0) { shapes.push_back(new Square(); }
if (myNumber == 1) { shapes.push_back(new Triangle(); }
return 0;
}
创建std::vector<Shape*>
,然后您可以在c++ 11中执行v.emplace_back(new Triangle());
。在c++ 03中,你可以使用v.push_back(new Triangle());
可以使用原始数组
Shape* shapes[10]; // array of pointers;
shapes[0] = new Triangle();
你也可以使用模板创建一个模板
template<typename ShapeType>
class Shape
{
public:
ShapeType draw();
//All common Shape Operations
};
class Triangle
{
};
//C++11
using Triangle = Shape<Triangle>;
Triangle mytriangle;
//C++03
typedef Shape<Square> Square;
Square mysquare;
我将创建这个函数:
Shape getNewShape(int shapeId)
{
switch (shapeId)
{
case 1: return new Square();
case 2: return new Triangle();
}
//here you should handle wrong shape id
}
然后像这样使用:
int main()
{
cin << myNumber;
// Depending on input, create instance of class corresponding to array index
shape tempShape = getNewShape(myNumber);
return 0;
}
相关文章:
- 指向指向字符数组的指针数组的指针
- 通过指向指针数组的指针访问子类的属性
- C++,指针数组,指向双链表中的条目
- 在C++中,如何初始化指向wchar_t*的指针数组(生成wchar_t**)
- C++从函数指针数组调用函数
- 关于指向指针数组的指针
- 将返回值存储在函数指针数组的指针中是如何工作的?
- 将链表转换为指针数组时出错
- C++ 对象指针数组的复制构造函数
- C++ - 循环访问指针数组会导致错误
- 删除指针数组 (C++) 中的元素
- 如何循环访问 cpp 中的函数返回的字符指针数组
- 将函数指针数组中的函数指针作为模板参数传递
- Google Or-Tools Glop:如何创建指向 const 对象的指针数组?
- 具有推导参数的模板函数指针数组变量
- 如何模板化堆栈分配的多态指针数组到接口,包括派生类型的相应点?
- C++指针数组到字符数组中的特定位置
- 如何在C++中复制指针数组的数据
- 初始化类中的指针数组,并在另一个类中检索它
- 尽管直接设置了指针数组,但仍为空