강의 흐름
- 동적 객체 배열
- 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에 집어넣는 것이다.
70번 Line - 의 의미는 그렇게 나온 최종 문자열을 buff에 집어넣고,
73번 Line - pa [ 0 ] 번째 요소의 값을 초기화해줄 때
73번 Line - Init함수( string name, int health, int age, int weight ) 첫 번째 매개변수 name의 인자 값으로 buff를 사용!
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에 넣어주고, 그것을 매개변수에 대입해주는 부분과
객체들로 이루어진 동적 객체 배열에서 함수를 호출할 경우에는 피리어드( . ) 연산자로
객체의 주소 값으로 이루어진 포인터형 동적 객체 배열에서는 화살표( -> ) 연산자로 호출하는 부분
새롭고 재미있었다.
+
포인터 형은...
이제 자주 보다 보니까 사용한 것을 보고는 어떤 의미인지 어떻게 실행되는지는 알겠는데
직접 사용해보라고 하면 아직 낯설고 바로바로 못 쓰겠다. ㅎㅎ
좀 더 만나고 써보고 해야 할 필요성을 느꼈다.
'Back-end > C++' 카테고리의 다른 글
22. 03. 22 - 파일 분할, inline 함수 (0) | 2022.04.02 |
---|---|
22.03.21. 복사 생성자, const함수 (0) | 2022.04.02 |
21.03.17 - 객체 배열, 동적 객체, 개념 플러스(GC,Malloc,Cin) (0) | 2022.03.24 |
22.03.16 - this 포인터, 네임맹글링(오버로딩), 배열 (0) | 2022.03.24 |
22.03.15 - 정적 멤버 변수, 정적 멤버 함수, 함수 호출 방식 (0) | 2022.03.18 |