Back-end/C++

22.03.18 - 동적 객체 배열, C언어 형식 지정 문자열, 동적 객체 포인터 배열

giggs 2022. 3. 25. 17:05

 

 

강의 흐름

 

  • 동적 객체 배열
  • C언어 형식 지정 문자열
  • 동적 객체 포인터 배열

 

 

 


 

 

동적 객체 배열

 

 

클래스와 생성자를 만들어 주고.

 

 

 

 

동적 객체 배열 초기화를 위한 함수 Init ( ) 만들어주고

speak( ) 함수 출력 info( ) 함수 만들어 주고

 

 

 

 

메인에서 배열 생성 및 출력 테스트

  • 배열 생성 ------ Pig* pa = new Pig [ count ];
  • 배열 초기화 ---- for문 - sprintf(buff) //// pa [ i ]. Init ( buff, i, i, i );
  • 배열 출력 ----- for문 - pa [ i ]. info( );
  • 배열 반납 ----- delete [ ] pa;

 

동적 객체 배열을 만들 경우 - 기본 생성자가 호출되어서 생성된다 - 그 다음 객체 배열들 만들어지고, 없어질때 소멸자 호출

 

 

 


 

 

C언어 형식 지정 문자열

 

 

 

 

%d, %f, %c

 

%d 역할 ->

  • 정수형으로 숫자 123을 출력하려면 문자로 1 / 2 / 3 출력해야 되는 것이다.
  • 1에 해당하는 아스키 문자 1 출력
  • 2에 해당하는 아스키 문자 2 출력
  • 3에 해당하는 아스키 문자 3 출력
  • 숫자 123을 출력하려면 문자로 1 / 2 / 3 출력해야 되는 것이다.
  • 숫자 123인데, 이것을 문자 123으로 출력해줘라

 

 

%c 역할 ->

  • char형으로 숫자 68에 출력하려면 
  • 68에 해당하는 아스키코드  'D'출력

 

 

각각의 자리에 차례대로 형식에 맞게 대입

 

 

결과는 완벽한 문자열 monster_ 123, 1.2 D 나온다.

 

 

여기서 사용한 printf는 - 이렇게 나온 문자열을 콘솔 창에 보여주는 것이고,

우리가 사용한 sprintf는 - 이렇게 나온 문자열을 buffer에 집어넣는 것이다.

 

 

sprintf 는 buff에 문자열 넣어주기, 그것을 Init함수의 매개 변수 값으로 전달

 

 

70번 Line - 의 의미는 그렇게 나온 최종 문자열을 buff에 집어넣고,

73번 Line - pa [ 0 ] 번째 요소의 값을 초기화해줄 때

73번 Line - Init함수( string name, int health, int age, int weight ) 첫 번째 매개변수 name의 인자 값으로 buff를 사용!

 

 

 

Init ( ) 함수 참고

 

 

 


 

 

Question 1-

  • Init 함수의 첫 번째 매개변수의 타입은 string이다.
  • 그런데 거기에 전달된 인자 buff의 타입은 char [ ] - 문자 배열인데 (위의 main부분 참조 )  
  • string으로 자동으로 형 변환되는 것인가요?

 

 

 

 

Answer -

  • YES.

 

 


 

 

Question 2-

 

 

 

 

Answer -

 

 

기본 개념

  • ( . ) ==> 피리어드를 사용하는 경우 : 객체 생성 후 그 객체로 접근하는 경우
  • ( -> ) ==>를 사용하는 경우 : 주소 값으로 접근하는 경우에 사용
  • 포인터형 기본개념

 

 

 

 

 

53번 Line - Pig형 객체 a생성

54번 Line - 생성된 a 객체를 이용하여 info( ) 함수 접근 --- a . info( );

58번 Line - Pig형 주소 값을 저장하는 변수 pa를 만들고 --- a의 주소 값을 대입

60번 Line - pa = &a --- a의 주소 값을 이용하여 info( ) 함수 접근 --- pa->info( );

 

62번 Line - Pig형 주소 값을 저장하는 변수 parray를 만들고 --- Pig 객체 배열의 주소 값을 대입

64번 Line - parray에 저장된 Pig객체 배열 주소 값으로부터 0칸 떨이진 애의 공간- 값이다 -> ( . ) 사용 

66번 Line - ( parray + 0 ) 은 주소 값에 0 더한 것! 아직 주소 값! --- (  ->  ) 사용

68번 Line - 포인터 연산자로 인해 공간을 의미! 값을 의미! --- (  .  ) 사용 

68번 Line - parray [ 0 ] 이랑 *( parray + 0 ) 이랑 같은 것이다.  

 

 


 

 

설명하기 위해 class부분은 동일하지만 main 부분에서 포인터형 동적 객체 배열 생성해서 설명해줌.

 

 

 

설명 - 

 

 

 

 

pparray는 pig** - (  pig형 주소 값을 저장하는 공간  )의 주소 값

전꺼는 pig를 저장하는 거였고, 여기는 pig형 주소 값pig*를 저장하는 공간을 입력받은 만큼 만들어 주는 것!

 

 

 

 

지금 하는 것은 1번 -

  • Pig 동적 객체 배열을 만들면서 - 객체의 주소 값 ( * )을 전달 --- new Pig* [ count ]
  • 전달받은 ( Pig* )의 주소 값을 저장하고 있는 공간 Pig** --- pparray
  • pparray [ ] 에는 Pig* 의 주소 값들이 인접하여 저장되어있다. --- Pig*/Pig*/Pig*
  • pparray 배열의 값 들은 다 주소 값이다.
  • 주소 값으로 함수 접근하려면 ( -> ) 사용 --- pparray[ i ] -> info( );

 

 

아까 했던 것은 2번 -

  • Pig 동적 객체 배열을 만들면서 - 객체의 값을 전달  --- new Pig [ count ];
  • 전달받은 ( Pig객체 )의 주소 값을 저장하고 있는 공간 Pig* --- pa 
  • pa [ ] 에는 Pig 객체의 값들이(멤버 변수의 값들이) 인접하여 저장되어있다. - Pig/Pig/Pig
  • pa 배열의 값 들은 다 값이다.
  • 값으로 함수 접근하려면 ( . ) 사용 ---- pa [ i ] . info( );

 

 

내가 이해한 내용으로 정리 :;;

 

 

 


 

 

 

review



이번 강의에서는
동적 객체 배열
C언어의 형식 지정 문자열
동적 객체 포인터형 배열


재밌었던 내용은
동적 객체 배열 - 초기화시켜주는 부분에서
sprintf로 완성된 문자열을  buff에 넣어주고, 그것을 매개변수에 대입해주는 부분과

객체들로 이루어진 동적 객체 배열에서 함수를 호출할 경우에는 피리어드( . ) 연산자로
객체의 주소 값으로 이루어진 포인터형 동적 객체 배열에서는 화살표( -> ) 연산자로 호출하는 부분
새롭고 재미있었다.

+
포인터 형은...
이제 자주 보다 보니까 사용한 것을 보고는 어떤 의미인지 어떻게 실행되는지는 알겠는데
직접 사용해보라고 하면 아직 낯설고 바로바로 못 쓰겠다. ㅎㅎ
좀 더 만나고 써보고 해야 할 필요성을 느꼈다.