본문 바로가기
코스웨어/14년 스마트컨트롤러

10. 02 업무일지 [ 이경진 ]

by 알 수 없는 사용자 2014. 10. 6.
728x90
반응형

1. SCOPE 연산자.

 

C++의 객체를 사용하기 위해서는 공간에대한 객체를 이용하는 방법을 알아야 하는데 이는 두가지 방법이 있다.

 

1) 공간이름::객체이름

즉, :: 이라는 스콥함수를 사용하여 공간의 객체를 이용할 수 있다.

ex) std::cout std::cin std::endl  // std공간의 cout, cin, endl 객체를 사용한다는 뜻이다.

 

2) using namespace 공간이름;

즉, 사용하는 공간을 using namespace 키워드를 사용하여 선언 할 수 있다.

using namespace std; // std공간을 using namespace 키워드를 이용하여 선언

cout << " Hello C World!!" << endl; // 위의 방식과 차이점을 볼 수 있다.

즉,  사용하는 네임스페이스를 선언하고 그 공간의 객체를 사용하는데 코드의 길이를 줄 일 수가 있다. 그리고 사용하기에도 간편하다.

 

 int iA= 100;
int main ()
{
  //==scope operater==//
  cout <<"1 : "<<iA<<"\n";
    // 출력 : 100
  int iA = 200;
  cout <<"2 : "<<iA<<"\n";
    // 출력 : 200
  cout <<"3 : "<<::iA<<"\n\n";
    // 출력 : 100

 1. 전역변수 iA 출력

 2. 지역변수 iA 출력 ( 이름이 같아도 다른 함수 안에 있는 변수는 별도의 변수로 활용 가능 )

 3.  ' ::iA ' 로 전역변수(1) iA 출력

 

 

 

2. bool

암묵적 캐스팅, 자동 캐스팅. define 되어 있는 값을 읽어들여 사용.

 

  //==bool==//
  //bool 은 true(1) false(0) 의 논리값을 가진 형식 / 1btye / 초기값을 넣지 않고 출력하면 쓰레기값이 출력 됨.
  // ture / false 를 넣어 보자!!

  bool bVal = true;
  cout<<"TURE : "<<bVal<<"\n";
  bVal = false;
  cout<<"FALSE : "<<bVal<<"\n\n";
    // 출력 : 1, 0
  
  // 숫자를 넣어 보자!!
  bVal = 0;
  cout<<"INSERT 0 : "<<bVal<<"\n";
  bVal = 3;
  cout<<"INSERT 3 : "<<bVal<<"\n";
  bVal = -1;
  cout<<"INSERT -1 : "<<bVal<<"\n\n";
    // 출력 : 0, 1, 1
    //0 외 값 외에는 1 로 출력 된다.
    
  // size를 출력해 보자!!
  cout<<"Size of FALSE is : "<<sizeof(bVal)<<"\n";
  cout<<"Size of TRUE is : "<<sizeof(true)<<"\n";
    // 출력 : 1, 1 => s=bool 의 size는 1 로 하향 삽입. 

 

 

3. Reference (참조 값 : C++ 의 포인터)

C는 포인터로 값을 가리킨다.

int a=100

int * p= &a

p는 100의 주소값을 가질 뿐, 값을 참조하는건 아니다. ( 진정한 reference 가 아니다)

a 가 값을 가지고, p 는 a 의 주소를 가진 별개의 메모리를 가진다.

그리고 a를 가리키는 포인터는 계속 양산 할 수 있다.

 

C++ 의 포인터(?)는 레퍼런스.

해당 변수를 가리키는 새변수를 만드는게 아니라, 같은 주소값을 가지는 변수의 이름이 두가지가 되는 것.

한번 대입하면 못바꾼다!!. 초기화 하면 끝. 다시 사용 할 수 없다.

효율성이 떨어져서 일반적 변수론 사용하지 않는다.

객체 함수 호출할 때 인자로 쓴다.

 
  int iVal = 99;
  cout <<"초기 iVal "<<iVal<<"\n";
  int &= iVal;
  R=88;
  cout <<"참조된 iVal : "<<iVal<<"\n";

    // 출력 : 99 , 88 

 // R은 iVal 을 가리키는 레퍼런스(참고) 변수 이다. R 로 iVal의 값을 변경 시킬 수 있다.


  cout <<"iVal의 주소 : "<<&iVal<<"\n";
  cout <<"R의 주소 : "<<&R<<"\n\n";
  //iVal 과 R 의주소값이 같다.


  test (iVal);
  
/*
    void test(int &R)
    {
      cout<<"R 주소값 인자전달 받은 R 출력 : "<<R<<"\n";
      R=3333;
    }
  */

  cout<<"다른 함수에서 참조 값 변경된 iVal : "<<iVal<<"\n\n";
      //출력 : 3333     참조 R 의 주소를 인자로 넘겨, iVal 의 값을 test 함수 안의 R로 변경.

  int *iP = &iVal;    // iVal 을 가리키는 포인터 iP
  int *(&ipR) = iP;    // iP의 값을 참조한 포인터 ipR
  cout <<"*ipR : "<<*ipR<<"\n";
  cout <<"*iP : "<<*iP<<"\n\n";
      // 출력값 : 3333, 3333 test 에서 변경한 값이 반영되었다!!

  //test(5);  //매개 변수 1을(를) 'int'에서 'int &'(으)로 변환할 수 없습니다

  int &iTest = test4(iVal);
  
/*
    int& test4(int &R)
    {
      return R;
    }
    (iVal 값을) '참조 R' 을 인자로 받는 '참조 iTest' 를 만듬.
    iTest는 R 과 마찬가지로 iVal 을 참조한다.
  */

  iTest = 123456;
  cout<<"iTest가 참조하는 iVal : "<<iVal<<"\n";

 

 

4. 동적할당

생성 : new [크기]

  return 값: 동적할당 메모리의 첫주소값을 반환하므로, 저장할 포인터값 필요!!!

참조 : 이전과 같이 레퍼런스로 값 삽입 가능.

삭제 : delete

 

배열의 동적할당 생성 : new void[]

삭제                        : delete [](생성시 반환값을 저장한 포인터 변수) 

 

 

#include <iostream>

using namespace std;
int main ()
{
 int * iP;
 iP=new int//동적 할당
 
 int &= *iP;
 R=100;
 cout<< *iP<<"\n";

 
 delete iP; //Free



// 배열의 동적할당

 iP =new int[3];

 
 delete []iP; //배열 Free

 return 0;
}
 

 

 

** 참고 C 와 C++ 동적할당 차이

http://blog.naver.com/abckrra?Redirect=Log&logNo=30189030164

===============================================Ui 제어 ===================================================================

 

1. 좌우 변경

 

 

정상 : x 축 0 ~ 좌측사이즈(Bm.bmiHeader.biWidth)까지 + 이동.

      for(xCnt=0 ; Bm.bmiHeader.biWidth> xCnt ;++xCnt)  

반대: 좌측사이즈 ( Bm.bmiHeader.biWidth ) 에서 x축 까지 - 이동

for((xCnt = Bm.bmiHeader.biWidth) ;xCnt >0 ;--xCnt)

 

 

2. 흑백 / 적색 / 청색 / 녹색 변경하기

 pixel 을 화면에 출력 할 때, 해당 색상 외 픽셀을 0 으로 꺼준다!!

 

원본 :

SetPixel(hMemDC,xCnt-1 ,yCnt-1, RGB(VideoHdr->lpData[Jump+2], VideoHdr->lpData[Jump+1], VideoHdr->lpData[Jump]) );//색상조정
Jump = Jump + 3;

 

빨간색

SetPixel(hMemDC,xCnt-1 ,yCnt-1, RGB(VideoHdr->lpData[Jump+2], 0,0) )

 

 

녹색

SetPixel(hMemDC,xCnt-1 ,yCnt-1, RGB(0,VideoHdr->lpData[Jump+1],0) )

파란색

SetPixel(hMemDC,xCnt-1 ,yCnt-1, RGB(0,0,VideoHdr->lpData[Jump+0]) )

 

 

 

 

3. 특정색 변경하기

 

 

* 특정 비트값 뽑아내기

그림판 -> 돋보기 -> 원하는 포인트 클릭 -> 색 - 색편집 -> RGB 수치 확인

     if (VideoHdr->lpData[Jump+2> ( "R 색상"-1 ))
     {
       if (VideoHdr->lpData[Jump+1> (" G 색상" -1))
       {
         if ( VideoHdr->lpData[Jump+0> ( "B 색상" -1 ) )
         {
             VideoHdr->lpData[Jump+2]=0; // 빨강색으로 발라주기 ( 255 )
             VideoHdr->lpData[Jump+1]=0; // 초록색으로 발라주기 ( 255 )
             VideoHdr->lpData[Jump]=255; // 파란색으로 발라주기 ( 255 )
             // 일정 색 변환하기. ( 일기예보등에 사용 )
         }//E_B
       }//E_G
     }//E_R

 

 

 

 

728x90