#include <iostream>
#include <vector>
using namespace std;

typedef float PixelValue;

class IImageData{
public:
	virtual PixelValue getData(int index) = 0;
};

class ImageData8 : public IImageData{
	vector<unsigned char> buffer_;
public:
	ImageData8():
		buffer_(10,128)
	{}
	virtual PixelValue getData(int index){
		return (float)buffer_[index] / 256.0f;
	}
};

class ImageData16 : public IImageData{
	vector<unsigned short> buffer_;
public:
	ImageData16():
		buffer_(10,65535)
	{}

	virtual PixelValue getData(int index){
		return (float)buffer_[index] / 65535.0f;
	}
};

int main() {
	// your code goes here
	ImageData8 i8;
	ImageData16 i16;
	vector<IImageData*> images;
	images.resize(2);
	images[0] = &i8;
	images[1] = &i16;
	
	for(auto img : images){
		cout << img->getData(0) <<endl;
	}
	return 0;
}