我有一個尷尬的問題。我認爲這是不可能的,但我需要確定。這是一個奇怪的請求,但我需要我的子類從父類共享SAME像素矢量。分享父類成員的子類
基本上,我想創建一個Image類的實例。該Image類將保存位圖和Png類的像素,以便如果我需要從位圖轉換爲PNG,反之亦然,它們使用相同的矢量,而不是創建位圖和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 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像素成員,並且數據的排列方式相同。
我想我試圖做到:PNG.SaveAsBitmap(...);或BMP.SaveAsPNG(...);而不創建另一個的新實例。
我該如何避免複製/創建並創建另一個類轉換爲新的實例?我可以擁有從彼此繼承的類嗎?
你爲什麼要將圖像類分成兩個獨立的類?爲什麼不把像素存儲爲原始位圖,然後當你需要加載/保存時,會有不同的方法來加載/保存PNG,JPG,BMP等。 –
那麼,因爲它們相當大,並已正常工作。我不想打破它併合並它們。它們也有相同名稱的成員完成不同的事情。我不確定你的意思是將像素存儲爲原始位圖。它們是兩個不同的類:S原始像素存儲在該向量中。 – Brandon
我在兩種不同類型的圖像類中看不到這一點。在兩個類中都有一個'RGB'數組,爲什麼要將通用性分爲兩個不同的類。加載圖像後,可以將其存儲爲RAW像素數據(這是我的意思是位圖)的通用格式。 我會做的是:有一個'圖像'類代表一個通用圖像。有一個ImageLoader和ImagerSaver類,用於加載和保存圖像,具體取決於您希望加載/保存的文件格式。 –