gpt4 book ai didi

C++ 指向类名的指针数组

转载 作者:太空宇宙 更新时间:2023-11-03 10:31:29 25 4
gpt4 key购买 nike

我希望能够保存一个类名数组,并简单地将一个索引传递给一个函数,该函数将创建某个类的实例。我有内存限制,所以我不想简单地创建一个对象数组。

这是我最具描述性的伪代码:

类:

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;
}

关于C++ 指向类名的指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15365805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com