본문 바로가기
코스웨어/10년 시스템제어

시스템제어 일일보고 11번 박동원

by 알 수 없는 사용자 2010. 5. 26.
728x90
반응형
C++

#include <iostream>
using namespace std;

//템플릿 클래스의 정의 
//template<class A, class B, int NUM>    //1,  1번과 2번은 동일한 문장 
template<typename A, typename B, int NUM>  //2,  
class TwoArray
{
  public:
    A arr1[NUM];
    B arr2[NUM];
};

int main()
{
  TwoArray<intfloat20> Obj1;  //템플릿 클래스의 사용 
  //arr1[NUM] 배열 생성  배열이 첫번째 즉 0번지에 77대입   
  Obj1.arr1[0= 77;        
  //arr2[NUM] 배열 생성  배열이 첫번째 즉 0번지에 0.1대입   
  Obj1.arr2[0= 0.1f;
  
  cout <<"Obj1.arr1[0] : " <<Obj1.arr1[0<<endl;
  cout <<"Obj1.arr2[0] : " <<Obj1.arr2[0<<endl;
  
  return 0;
}



#include <iostream>
using namespace std;

//템플릿 함수 정의
template<class T>

//인자와 반환 값의 타입으로 템플릿 매개 변수 T사용
T Max(T num1, T num2)  
{
  //3항 연산자 ? 앞의 조건이 참이면  : 앞의 값 거짓이면 : 뒤의 값 리턴 
  return (num1 > num2 ? num1 : num2);  
}

int main()
{
  int i1 = 100;
  int i2 = 200;
  int iBig = Max(i1, i2);    //int 형의Max 함수 호출 
  cout <<"큰 수는 : " <<iBig <<endl; 

  float f1 = 0.5f;
  float f2 = 1.8f;
  float fBig = Max(f1, f2);  //double형의  Max 함수 호출   
  
  cout <<"큰 수는 : " <<fBig <<endl; 

  return 0;
}

#include <iostream>

using namespace std;

template <class Z>
class Array
{
  public:
    Array()  //생성자 
    {
      Elems = 0;
      NumElems  = 0;
    }
    
    ~Array()  //소멸자 
    {
      if(0 != NumElems)
      {
        delete[] Elems;  //동적 할당 소멸 
      }
    }
    
    void SetSize(size_t value)
    {
      delete [] Elems;
      NumElems = value;
      
      //동적 할당받은 배열의 번지마다 다시 동적 할당  
      Elems = new Z[value];  
      
      if(0 == Elems)  //동적 할당을 못받았을 경우 
      {
        NumElems = 0;
      }
    }
    
    size_t GetSize()
    {
      cout <<"GetSize() 호출" <<endl;
    }

    void SetElem(size_t index, Z value)
    {
      if(NumElems <= index)  //배열 몇개 만들었는지 검사 
      {
        return ;
      }
      Elems[index] = value; //배열 갯수 수정
    }
    
    Z GetElem(size_t index)
    {
      if(NumElems <= index)  
      {
        return Z();  //임시 객체 리턴 
      }
      return Elems[index];
    }
  
  private :
    //Elems타입은  Musician **Elems 더블 포인터이다 
    //메인문의 템플릿 클래스 사용부분에서 클래스 포인터로 정의 됨
    Z *Elems;  
    size_t NumElems;
};

class Musician
{
  public:
    virtual void greet();  //가상 함수 객체기반 호출 
    virtual void play();  // 
};

void Musician::greet()
{
  cout << "뮤지션 인사 : 안녕~ " <<endl;
}

void Musician::play()
{
  cout << "뮤지션 연주 : 딴따~ " <<endl;
}

class Trumpeter : public Musician
{
  public:
    void greet()
    {
      cout << "트럼펫 인사 : 하이~ " <<endl;
    }
    void play()
    {
      cout << "트럼펫 연주 : 빰빠~ " <<endl;
    }
}; 


class Flautist: public Musician
{
  public:
    void greet()
    {
      cout << "풀룻 인사 : 하이~ " <<endl;
    }
    void play()
    {
      cout << "풀룻 연주 : 삐리리~ " <<endl;
    }
}; 

void WarmUp(Musician *pm)
{
  cout <<"오케스트라 단원입니다..." <<endl;
  pm->greet();  //가상 함수 객체기반 호출 
  cout <<"소리 내봐..." <<endl;
  pm->play();    //가상 함수 객체기반 호출 
}

#define MEMBER 10
int main() 
{
  //템플릿 클래스 사용 , 클래스 포인터 형으로
  Array<Musician *> orchestra;    
  int iCnt;
  
  //10개의 동적 할당 받은 배열 생성 
  orchestra.SetSize(MEMBER);
  orchestra.SetElem(0new Trumpeter);
  orchestra.SetElem(1new Flautist);
  orchestra.SetElem(2new Trumpeter);
  orchestra.SetElem(3new Trumpeter);
  orchestra.SetElem(4new Flautist);
  orchestra.SetElem(5new Trumpeter);
  orchestra.SetElem(6new Flautist);
  orchestra.SetElem(7new Flautist);
  orchestra.SetElem(8new Trumpeter);
  orchestra.SetElem(9new Flautist);

  cout <<"오케스트라 소개 및 웜업 입니다.." <<endl;
  for(iCnt = 0; iCnt<MEMBER; iCnt++)
  {
    WarmUp(orchestra.GetElem(iCnt));
  }
  
  //배열 요소마다 다시 동적할당 받은 메모리 해제
  for(iCnt = 0; iCnt<MEMBER; iCnt++)
  {
    delete orchestra.GetElem(iCnt);  
  }
  return 0;
}




WIN API





1. FILE HEADER  - 파일에 대한 정보 가짐
  BITMAPFILEHEADER 구조체
2.
 INFORMATION HEADER  실제 비트맵에 대한 세부 정보 가짐
  BITMAPINFOHEADER 구조체
3.
 PALETTE  각 픽셀이 가지고 있는 값에 대한 실제 RGB값 저장
  RGBQUAD 구조체 비트맵이 
256
개 이하 색상일 경우만 해당(트루컬러 비트맵인 경우  PALETTE가 없음)
4.
 DATA  각 픽셀의 색상값 저장되어 있음


1.
 BITMAPFILEHEADER 구조체
비타맵 파일에 대한 정보(파일헤드)

typedef struct tagBITMAPFILEHEADER {    // 14 =
 2+4+2+2+4 (byte)
   WORD    bfType;                
// "BM"이라는 글자가 설정됨
   DWORD   bfSize;                
// 비트맵 파일의 전체 크기
   WORD    bfReserved1;        
// 예약변수(0으로 설정함)
   WORD    bfReserved2;          
// 예약변수(0으로 설정함)
   DWORD   bfOffBits;            
// 파일에서 비트맵 데이터가 있는 위치
} BITMAPFILEHEADER;

파일의 형태를 지정하는 매직 넘버이며 비트맵인 경우 반드시 BM이어야 함. (
0x420x4
d)
비트맵파일인지 아닌지를 확인하는 변수가 bfType 이다. 
BMP파일의 첫 두 바이트는 항상 
"BM"
 문자가 저장된다. 
bfOffBits 는 파일 시작부분에서 실제 영상데이터가 존재하는 위치까지 바이트 단위의
거리를 나타낸다. 
WORD 는 
unsigned short, DWORD 는 unsigned long
 으로 정의되어 있다



2.
 BITMAPINFOHEADER 구조체
비트맵 영상에 대한 크기, 흑백, 칼러정보, 팔레트 크기 정보등을 저장하기 위한 구조체 변수이다

typedef struct tagBITMAPINFOHEADER {  // 40 =
 4+4+4+2+2+4+4+4+4+4+4 (byte)
   DWORD biSize;                       
// 구조체의 크기
   LONG biWidth;                        
// 비트맵의 가로 크기
   LONG biHeight;                      
// 비트맵의 세로 크기
   WORD biPlanes;                     
// Plane수(1로 설정함)
   WORD biBitCount;                   
// 한 픽셀당 비트수
   DWORD biCompression;          
// 압축 유무 플래그
   DWORD biSizeImage;              
// 그림 데이터의 크기
   LONG biXPelsPerMeter;           
// 한 픽셀당 가로 미터
   LONG biYPelsPerMeter;           
// 한 픽셀당 세로 미터
   DWORD biClrUsed;                
// 그림에서 실제 사용되는 컬러 수
   DWORD biClrImportant;           
// 중요하게 사용되는 컬러
} BITMAPINFOHEADER;

중요한 정보는 영상파일의 크기를 나타내는 변수 biHeight, biWidth 와 흑백과 칼라여부를 

나타내는 biBitCount, 팔레트 크기를 나타내는 biClrUsed 등이다 
biBitCount 가 
8이면 흑백영상이거나 2^8 = 256
 칼라의 영상이다
24라면 트루칼라, 16이면 2^16 개의 칼라를 사용하는 영상이다


728x90