저는 현재 C ++을 배우고 있으며이를 위해 간단한 이미지 변환기를 작성하고 있습니다.
DXTn 또는 BMP와 같이 이미지의 다른 메모리 레이아웃을 포함하는 기본 이미지 클래스를 갖고 싶습니다. 이러한 다양한 데이터 유형을 포함 할 수있는 클래스를 올바르게 디자인하려면 어떻게해야합니까? (스마트) 포인터에 메모리를 저장하는 더 좋은 방법이 있습니까?
class Image
{
public:
void loadDXT() { }
void loadBMP() { }
private:
char* data1;
std::unique_ptr< char* > data2;
}
또는 간단한 기본 클래스에서보다 구체적인 클래스를 파생하는 것이 더 낫습니다.
class baseImage
{
public:
enum imgType { BMP , DXT };
void load() = 0;
}
class BMPImage : public baseImage
{
//bmp specific stuff here
}
이것은이 이미지 클래스에만 국한된 것이 아니라 일반적으로 다른 데이터 멤버를 포함하는 클래스를 어떻게 디자인해야하는지 궁금합니다.
감사합니다.
나는 가상 추상 인터페이스가 당신의 삶을 더 쉽게 만들어 줄 jwg에 동의합니다 .
예를 들면 :
class BaseImage//base class
{
public:
virtual void DoThingsRelatedToAllImages_1()=0;
virtual void DoThingsRelatedToAllImages_2()=0;
//...and so on and whatever else
private:
int DataUsedForAllImageTypes;
};
//this is our child class
class Bmp: public BaseImage
{
private:
int DataUsedOnlyForBmpTypeImages;
};
void Bmp::DoThingsRelatedToAllImages_1()
{
//Do Whatever this function should do for a bitmap
}
void Bmp::DoThingsRelatedToAllImages_2()
{
//Do Whatever this function should do for a bitmap
}
추상 클래스는 구현이 없기 때문에 인스턴스화 할 수 없습니다. 추상 클래스가 아닌 가상 클래스를 사용하는 경우 이론적으로 필요한 경우 유형이없는 이미지 클래스를 사용할 수 있습니다. 가상 클래스에 기본 구현을 제공하기 만하면됩니다.
예를 들면 :
class BaseImage//base class
{
public:
virtual void DoThingsRelatedToAllImages_1();
virtual void DoThingsRelatedToAllImages_2();
//...and so on and whatever else
private:
int DataUsedForAllImageTypes;
};
void BaseImage::DoThingsRelatedToAllImages_1()
{
//Do Whatever this function should do for a base image
}
void BaseImage::DoThingsRelatedToAllImages_2()
{
//Do Whatever this function should do for a base image
}
//this is our child class
class Bmp: public BaseImage
{
private:
int DataUsedOnlyForBmpTypeImages;
};
void Bmp::DoThingsRelatedToAllImages_1()
{
//Do Whatever this function should do for a bitmap
}
void Bmp::DoThingsRelatedToAllImages_2()
{
//Do Whatever this function should do for a bitmap
}
도움이 되었기를 바랍니다. 또한 템플릿 클래스가 매우 유용 할 수 있다고 말하고 싶지만 지금은 실제로 그것에 대해 다루고 싶지 않기 때문에 알아 두도록하겠습니다.
행운을 빕니다. 제가 말한 내용을 명확히 할 수 있으면 알려주세요.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다