c++ - 共享父类成员的子类

标签 c++

我有一个尴尬的问题。我认为这是不可能的,但我需要确定。这是一个有点奇怪的请求,但我需要我的子类共享来自父类的 SAME Pixels vector 。

基本上,我想创建一个 Image 类的实例。该 Image 类将保存 Bitmap 和 Png 类的像素,因此如果我需要从 Bitmap 转换为 PNG,反之亦然,它们使用相同的 vector ,而不是我同时创建 Bitmap 和 PNG 类。

class Image
{
    private:
        std::vector<RGB> Pixels;
};



class Bitmap : Image
{
    public:
        Bitmap() : Image() {};
};


class Png : Image
{
    public:
        Png() : Image() {};
};

这样当我这样做时:

int main()
{
    Image Img();

    Img.GetBitmapPixels();  //This
    Img.GetPngPixels();     //And this, return the same Pixels Vector.

    Bitmap Foo = Img.ToPng();
    Png Moo = Img.ToBitmap();
    //Such that both Foo and Moo have the exact same underlying Pixels Vector.
}

目前我的类(class)是这样的:

class Bitmap
{
    private:
        std::vector<RGB> Pixels;

    public:
        Bitmap();
        std::vector<RGB> GetPixels() {return Pixels;}
        void SetPixels(std::vector<RGB> Pixels) {this->Pixels = Pixels;}
};

class Png
{
    private:
        std::vector<RGB> Pixels;

    public:
        Png();
        std::vector<RGB> GetPixels() {return Pixels;}
        void SetPixels(std::vector<RGB> Pixels) {this->Pixels = Pixels;}
};

要从一个转换为另一个,我必须这样做:

int main()
{
    Bitmap Bmp();
    Png PNG();

    PNG.SetPixels(BMP.GetPixels);   //BMP has to COPY PNG's Pixels and vice-versa..
}

这是一个愚蠢的问题。我只是不想复制像素。我只是希望能够在两个类之间进行转换而无需任何复制,因为这两个类都包含一个 std::vector Pixels 成员并且数据对齐方式相同。

我想我正在努力做到:PNG.SaveAsBitmap(...);或者 BMP.SaveAsPNG(...);无需创建另一个的新实例。

如何避免复制/创建和创建我要转换到的其他类的新实例?我可以拥有相互继承的类吗?

最佳答案

我可能过于简单化了这一点。您如何加载数据?如果每种图像类型都相同,您是否可以在图像类中加载并重载翻译函数。我不是图像数据方面的专家,但你能做一些类似的事情吗:

   public Image
    {
       private Pixels data;
       public void GetPixels();
       public virtual Pixels ToFormat(FormatEnum format);
    }

    public Bitmap:Image
    {
        public override Pixels ToFormat(FormatEnum format)
        {
            switch(format){  
                case FormatEnum.Bitmap:return data;break;
                case FormatEnum.Png:return doSomethingElse();break;
            }
        }
    } 

   int main()
   {
      Image Img();

      Img.GetPixels();

       Bitmap Foo = Img.ToFormat(Format.BitMap);
       Png Moo = Img.ToFormat(Format.Png);

   }

关于c++ - 共享父类成员的子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14016338/

相关文章:

c++ - Arduino C++ 将对象作为参数传递

c++ - 将功能委托(delegate)/转发给成员(组合)

c++ - OpenCV 矩阵与 C++ 中的零矩阵的串联

c++ - int&a 和 int &a 有区别吗?

c++ - fatal error :boost/filesystem.hpp:没有这样的文件或目录

c++ - STL 代码 typedef typename value_type、size_type 等。这些是如何工作的?

c++ - 如何在 Ubuntu 上安装 OpenSSL 库?

c++ - 链接器是否识别 namespace 别名?

c++ - 如果未链接使用代码,则未定义对 g++ 中静态常量成员的引用

c++ - Mingw编译错误使用