다른 데이터를 포함하는 클래스 디자인

무감각

저는 현재 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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

컴포넌트가 다른 데이터를 보유 할 수있는 경우 Component 클래스의 자식을 Object 클래스에 연결하는 함수를 어떻게 디자인 하시겠습니까?

분류에서Dev

클래스 디자인 : 다른 인터페이스를 구현하는 인터페이스를 구현하는 클래스

분류에서Dev

개인 변수를 포함하여 다른 클래스의 클래스에서 선언 된 모든 데이터 변수 목록을 가져 오는 방법

분류에서Dev

하나의 Adaptee 클래스가 다른 클래스를 상속하는 어댑터 디자인 패턴?

분류에서Dev

다형성 클래스에 대한 포인터를 포함하는 벡터

분류에서Dev

인터페이스 구현이 다른 클래스의 다른 인스턴스를 만들 수있는 디자인 패턴을 찾고 있습니다.

분류에서Dev

멤버 friend 함수를 클래스의 다른 멤버를 사용하지 않고 포인터를 사용하여 개인 데이터 멤버 클래스에 액세스 할 수있는 이유는 무엇입니까?

분류에서Dev

다른 클래스의 포인터를 통해 액세스 할 때 "무작위"값을 포함하는 클래스의 배열 속성

분류에서Dev

이미 포함 된 다른 클래스를 상속하는 클래스 상속

분류에서Dev

이 클래스를 디자인하고 테스트하는 올바른 방법

분류에서Dev

한 클래스의 함수를 다른 클래스의 다른 함수의 인수로 전달하는 방법

분류에서Dev

클래스 파일에 다른 클래스를 포함하는 방법

분류에서Dev

다른 클래스를 속성으로 포함하는 클래스

분류에서Dev

다른 클래스 내의 다른 클래스에 대한 C ++ 포인터

분류에서Dev

다른 클래스의 객체에 대한 포인터를 취하는 멤버 함수가있는 두 클래스

분류에서Dev

최소 클래스를 사용하도록이 Firebase 데이터베이스를 다시 디자인하는 방법은 무엇입니까?

분류에서Dev

cppyy는 스마트 포인터를 포함하는 클래스를 상속합니다.

분류에서Dev

다른 클래스의 멤버 함수 포인터의 C ++ 맵

분류에서Dev

다른 클래스의 함수 포인터 사용

분류에서Dev

메서드를 포함하여 자바 스크립트에서 한 클래스의 속성을 다른 클래스로 복사하는 방법

분류에서Dev

데이터 액세스 클래스 디자인 : 종속성을 포함하면서 클래스를 테스트 가능하게 만들기

분류에서Dev

C ++ 인터페이스를 통해 여러 다른 클래스에서 상속하는 클래스 사용

분류에서Dev

다른 프로젝트에서 재사용 할 수있는 클래스를 디자인하는 방법

분류에서Dev

동일한 클래스에서 다른 작업을 캡슐화하는 데 사용할 디자인 패턴

분류에서Dev

클래스에 대한 C ++ 포인터, 클래스 인스턴스가 해제 된 함수를 호출하는 것이 좋습니다.

분류에서Dev

함수 포인터를 C의 다른 함수 포인터로 캐스팅하는 것이 안전합니까?

분류에서Dev

다른 클래스의 Tkinter 목록 상자에 데이터를 추가하는 방법은 무엇입니까?

분류에서Dev

해당 인터페이스 유형의 멤버를 포함하는 클래스에서 인터페이스 유형을 정의하는 올바른 방법

분류에서Dev

UI를 디자인하는 데 UML 클래스 다이어그램이 필요한가요?

Related 관련 기사

  1. 1

    컴포넌트가 다른 데이터를 보유 할 수있는 경우 Component 클래스의 자식을 Object 클래스에 연결하는 함수를 어떻게 디자인 하시겠습니까?

  2. 2

    클래스 디자인 : 다른 인터페이스를 구현하는 인터페이스를 구현하는 클래스

  3. 3

    개인 변수를 포함하여 다른 클래스의 클래스에서 선언 된 모든 데이터 변수 목록을 가져 오는 방법

  4. 4

    하나의 Adaptee 클래스가 다른 클래스를 상속하는 어댑터 디자인 패턴?

  5. 5

    다형성 클래스에 대한 포인터를 포함하는 벡터

  6. 6

    인터페이스 구현이 다른 클래스의 다른 인스턴스를 만들 수있는 디자인 패턴을 찾고 있습니다.

  7. 7

    멤버 friend 함수를 클래스의 다른 멤버를 사용하지 않고 포인터를 사용하여 개인 데이터 멤버 클래스에 액세스 할 수있는 이유는 무엇입니까?

  8. 8

    다른 클래스의 포인터를 통해 액세스 할 때 "무작위"값을 포함하는 클래스의 배열 속성

  9. 9

    이미 포함 된 다른 클래스를 상속하는 클래스 상속

  10. 10

    이 클래스를 디자인하고 테스트하는 올바른 방법

  11. 11

    한 클래스의 함수를 다른 클래스의 다른 함수의 인수로 전달하는 방법

  12. 12

    클래스 파일에 다른 클래스를 포함하는 방법

  13. 13

    다른 클래스를 속성으로 포함하는 클래스

  14. 14

    다른 클래스 내의 다른 클래스에 대한 C ++ 포인터

  15. 15

    다른 클래스의 객체에 대한 포인터를 취하는 멤버 함수가있는 두 클래스

  16. 16

    최소 클래스를 사용하도록이 Firebase 데이터베이스를 다시 디자인하는 방법은 무엇입니까?

  17. 17

    cppyy는 스마트 포인터를 포함하는 클래스를 상속합니다.

  18. 18

    다른 클래스의 멤버 함수 포인터의 C ++ 맵

  19. 19

    다른 클래스의 함수 포인터 사용

  20. 20

    메서드를 포함하여 자바 스크립트에서 한 클래스의 속성을 다른 클래스로 복사하는 방법

  21. 21

    데이터 액세스 클래스 디자인 : 종속성을 포함하면서 클래스를 테스트 가능하게 만들기

  22. 22

    C ++ 인터페이스를 통해 여러 다른 클래스에서 상속하는 클래스 사용

  23. 23

    다른 프로젝트에서 재사용 할 수있는 클래스를 디자인하는 방법

  24. 24

    동일한 클래스에서 다른 작업을 캡슐화하는 데 사용할 디자인 패턴

  25. 25

    클래스에 대한 C ++ 포인터, 클래스 인스턴스가 해제 된 함수를 호출하는 것이 좋습니다.

  26. 26

    함수 포인터를 C의 다른 함수 포인터로 캐스팅하는 것이 안전합니까?

  27. 27

    다른 클래스의 Tkinter 목록 상자에 데이터를 추가하는 방법은 무엇입니까?

  28. 28

    해당 인터페이스 유형의 멤버를 포함하는 클래스에서 인터페이스 유형을 정의하는 올바른 방법

  29. 29

    UI를 디자인하는 데 UML 클래스 다이어그램이 필요한가요?

뜨겁다태그

보관