如何在 C++ 数组中调用特定 objects 的函数?

How to call a function for specific objects in a C++ Array?

我希望你能帮助我,因为我正在努力改进我的 C++ 继承概念。首先,我有以下 object 层次结构:

一个基础 class "Image" 有两个 child classes:PNG 和 JPG(每个都有他们的方法)。

我在 PNG class 中编写了一个方法(以模拟方式)删除 alpha 通道(它只打印 "Alpha channel deleted")。

话虽如此,我想编写一个方法,该方法将许多指向图像 objects(可以是 JPG 或 PNG)的指针数组作为输入,并仅删除那些是PNG。由于在 C++ 中询问 object 的类型(或者我相信)不是一个好习惯,这是遍历图像数组的最佳方式(记住它可以用 PNG 或JPG objects) 并仅删除 PNG objects 的 Alpha 通道?我应该在哪个 class 中编写该方法? Parent 或 child?

希望我的解释是正确的,非常感谢你。

最明显的实现是基础 class 有一个用于删除空操作的 alpha 通道的虚拟方法。 PNG class 继承自 Image 并覆盖此成员函数。

class Image
{
public:
    virtual void DeleteAlphaChannel() {};
};


class PNG : public Image
{
   void DeleteAlphaChannel() override
   {
      cout << "Alpha Channel deleted" << endl;
   }
};

然后是一个辅助函数,它采用 数组 图像指针 ,因此 Image**

void DeleteAlphaChannelsFromArrayOfObjects(Image** imageList, int count)
{
    for (int i = 0; i < count; i++)
    {
        imageList[i]->DeleteAlphaChannel();
    }
}

以及相应的示例代码。

{
    PNG pngFile("foo.png");
    JPG jpgFile("bar.jpg");

    Image* imageList[2] = {&pngFile, &jpgFile};
    DeleteAlphaChannelsFromArrayOfObjects(imageList, 2);
}

你也可以做一个矢量风格的实现:

void DeleteAlphaChannelsFromArrayOfObjects(std::vector<Image*>& imageList)
{
    for (Image* pImage : images)
        pImage->DeleteAlphaChannel();
}