Presentation is loading. Please wait.

Presentation is loading. Please wait.

윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 02. C언어 기반의 C++ 2.

Similar presentations


Presentation on theme: "윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 02. C언어 기반의 C++ 2."— Presentation transcript:

1 윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 02. C언어 기반의 C++ 2

2 Chapter 02-1. Chapter 02의 시작에 앞서
윤성우의 열혈 C++ 프로그래밍 Chapter Chapter 02의 시작에 앞서 윤성우 저 열혈강의 C++ 프로그래밍 개정판

3 C언어의 복습을 유도하는 확인학습 문제1 윤성우의 열혈 C++ 프로그래밍 문제 1의 답안

4 C언어의 복습을 유도하는 확인학습 문제2 윤성우의 열혈 C++ 프로그래밍 문제 2의 답안

5 C언어의 복습을 유도하는 확인학습 문제3 윤성우의 열혈 C++ 프로그래밍 문제 3의 답안

6 윤성우의 열혈 C++ 프로그래밍 Chapter 새로운 자료형 bool 윤성우 저 열혈강의 C++ 프로그래밍 개정판

7 ‘참’을 의미하는 true와 ‘거짓’을 의미하는 false
윤성우의 열혈 C++ 프로그래밍 true는 ‘참’을 의미하는 1바이트 데이터이고, false는 ‘거짓’을 의미하는 1바이트 데이터이다. 이 둘은 각각 정수 1과 0이 아니다. 그러나 정수가 와야 할 위치에 오게 되면 , 각각 1과 0으로 변환이 된다. 실행결과

8 자료형 bool 윤성우의 열혈 C++ 프로그래밍 bool의 이해 true와 false는 bool형 데이터이다.
실행결과

9 윤성우의 열혈 C++ 프로그래밍 Chapter 참조자의 이해 윤성우 저 열혈강의 C++ 프로그래밍 개정판

10 참조자(Reference)의 이해 윤성우의 열혈 C++ 프로그래밍
변수의 선언으로 인해서 num1이라는 이름으로 메모리 공간이 할당된다. 참조자의 선언으로 인해서 num1의 메모리 공간에 num2라는 이름이 추가로 붙게 된다. 참조자는 기존에 선언된 변수에 붙이는 ‘별칭’이다. 그리고 이렇게 참조자가 만들어지면 이는 변수의 이름과 사실상 차이가 없다.

11 참조자 관련 예제와 참조자의 선언 윤성우의 열혈 C++ 프로그래밍 실행결과
num2는 num1의 참조자이다. 따라서 이후부터는 num1으로 하는 모든 연산은 num2로 하는것과 동일한 결과를 보인다. 실행결과 참조자의 수에는 제한이 없으며, 참조자를 대상으로 참조자를 선언하는 것도 가능하다.

12 참조자의 선언 가능 범위 윤성우의 열혈 C++ 프로그래밍 실행결과 불가능한 참조자의 선언의 예
상수 대상으로의 참조자 선언은 불가능하다. 정리하면, 참조자는 선언과 동시에 누군가를 참조해야 하는데, 그 참조의 대상은 기본적으로 변수가 되어야 한다. 그리고 참조자는 참조의 대상을 변경할 수 없다. 참조자는 생성과 동시에 누군가를 참조해야 한다. 포인터처럼 NULL로 초기화하는 것도 불가능하다. 변수의 성향을 지니는 대상이라면 참조자의 선언이 가능하다. 배열의 요소 역시 변수의 성향을 지니기 때문에 참조자의 선언이 가능하다. 실행결과

13 포인터 변수 대상의 참조자 선언 윤성우의 열혈 C++ 프로그래밍 실행결과
ptr과 dptr 역시 변수이다. 다만 주소 값을 저장하는 포인터 변수일 뿐이다. 따라서 이렇듯 참조자의 선언이 가능하다. 실행결과

14 윤성우의 열혈 C++ 프로그래밍 Chapter 참조자와 함수 윤성우 저 열혈강의 C++ 프로그래밍 개정판

15 Call-by-value & Call-by-reference
윤성우의 열혈 C++ 프로그래밍 값을 전달하면서 호출하게 되는 함수이므로 이 함수는 Call-by-value이다. 이 경우 함수 외에 선언된 변수에는 접근이 불가능하다. 값은 값이되, 주소 값을 전달하면서 호출하게 되는 함수이므로 이 함수는 Call-by-reference이다. 이 경우 인자로 전달된 주소의 메모리 공간에 접근이 가능하다! C언어 학습 시 공부한 내용에 대한 복습이다.

16 Call-by-address? Call-by-reference!
윤성우의 열혈 C++ 프로그래밍 포인터 ptr에 전달된 주소 값의 관점에서 보면 이는 Call-by-value이다. 주소 값을 전달 받아서 외부에 있는 메모리 공간에 접근을 했으니 이는 Call-by-reference이다. C++에는 두 가지 형태의 Call-by-reference가 존재한다. 하나는 주소 값을 이용하는 형태이며, 다른 하나는 참조자를 이용하는 형태이다.

17 참조자를 이용한 Call-by-reference
윤성우의 열혈 C++ 프로그래밍 매개변수는 함수가 호출될 때 선언이 되는 변수이므로, 함수호출의 과정에서 선언과 동시에 전달되는 대상으로 초기화된다. 즉, 매개변수에 선언된 참조자는 여전히 선언과 동시에 초기화된다. 참조자 기반의 Call-by-reference!

18 const 참조자 윤성우의 열혈 C++ 프로그래밍 함수의 호출 형태 함수의 정의 형태
함수의 정의형태와 함수의 호출형태를 보아도 값의 변경유무를 알 수 없다! 이를 알려면 HappyFunc 함수의 몸체 부분을 확인해야 한다. 그리고 이는 큰 단점이다! 함수 HappyFunc 내에서 참조자 ref를 이용한 값의 변경은 허용하지 않겠다! 라는 의미! 함수 내에서 참조자를 통한 값의 변경을 진행하지 않을 경우 참조자를 const로 선언해서, 다음 두 가지 장점을 얻도록 하자! 1. 함수의 원형 선언만 봐도 값의 변경이 일어나지 않음을 판단할 수 있다. 2. 실수로 인한 값의 변경이 일어나지 않는다.

19 반환형이 참조이고 반환도 참조로 받는 경우 윤성우의 열혈 C++ 프로그래밍 반환의 과정에서 일어나는 일은 다음의 경우와 같다.

20 반환형은 참조이되 반환은 변수로 받는 경우 윤성우의 열혈 C++ 프로그래밍 반환의 과정에서 일어나는 일은 다음의 경우와 같다.

21 참조를 대상으로 값을 반환하는 경우 윤성우의 열혈 C++ 프로그래밍
참조자를 반환하건, 변수에 저장된 값을 반환하건, 반환형이 참조형이 아니라면 차이는 없다! 어차피 참조자가 참조하는 값이나 변수에 저장된 값이 반환되므로! 반환형이 참조형인 경우에는 반환되는 대상을 참조자로 그리고 변수로 받을 수 있다. 그러나 반환형이 값의 형태라면, 참조자로 그 값을 받을 수 없다!

22 잘못된 참조의 반환 윤성우의 열혈 C++ 프로그래밍
이와 같이 지역변수를 참조의 형태로 반환하는 것은 문제의 소지가 된다. 따라서 이러한 형태로는 함수를 정의하면 안 된다. 에러의 원인! ref가 참조하는 대상이 소멸된다!

23 const 참조자의 또 다른 특징 윤성우의 열혈 C++ 프로그래밍
에러의 원인! 이를 허용한다는 것은 ref를 통한 값의 변경을 허용한다는 뜻이 되고, 이는 num을 const로 선언하는 이유를 잃게 만드는 결과이므로! 해결책! 따라서 한번 const 선언이 들어가기 시작하면 관련해서 몇몇 변수들이 const로 선언되어야 하는데, 이는 프로그램의 안전성을 높이는 결과로 이어지기 때문에, const 선언을 빈번히 하는 것은 좋은 습관이라 할 수 있다.

24 어떻게 참조자가 상수를 참조하냐고요! 윤성우의 열혈 C++ 프로그래밍 const 참조자는 상수를 참조할 수 있다. 이유는,
이러한 것이 가능하도록 한 이유! 이렇듯 매개변수 형이 참조자인 경우에 상수를 전달할 수 있도록 하기 위함이 바로 이유이다!

25 Chapter 02-5. malloc & free를 대신하는 new & delete
윤성우의 열혈 C++ 프로그래밍 Chapter malloc & free를 대신하는 new & delete 윤성우 저 열혈강의 C++ 프로그래밍 개정판

26 new & delete 윤성우의 열혈 C++ 프로그래밍 malloc을 대한하는 메모리의 동적 할당방법!
크기를 바이트 단위로 계산하는 일을 거치지 않아도 된다! free를 대신하는 메모리의 해제방법! new 연산자로 할당된 메모리 공간은 반드시 delete 함수호출을 통해서 소멸해야 한다! 특히 이후에 공부하는 객체의 생성 및 소멸 과정에서 호출하게 되는 new & delete 연산자의 연산자의 연산특성은 malloc & free와 큰 차이가 있다!

27 포인터를 사용하지 않고 힙에 접근하기 윤성우의 열혈 C++ 프로그래밍
변수의 성향을 지니는(값의 변경이 가능한) 대상에 대해서는 참조자의 선언이 가능하다. C언어의 경우 힙 영역으로의 접근을 위해서는 반드시 포인터를 사용해야만 했다. 하지만 C++에서는 참조자를 이용한 접근도 가능하다!

28 Chapter 02-6. C++에서 C언어의 표준함수 호출하기
윤성우의 열혈 C++ 프로그래밍 Chapter C++에서 C언어의 표준함수 호출하기 윤성우 저 열혈강의 C++ 프로그래밍 개정판

29 C++의 표준헤더: c를 더하고 .h를 빼라. 윤성우의 열혈 C++ 프로그래밍
이렇듯, 표준 C에 대응하는 표준 C++ 함수는 C++ 문법을 기반으로 변경 및 확장되었다. 따라서 가급적이면 C++의 헤더파일을 포함하여, C++의 표준함수를 호출해야 한다. 표준 C의 abs 함수 대응하는 C++의 표준 abs 함수

30 Chapter 02가 끝났습니다. 질문 있으신지요?


Download ppt "윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 02. C언어 기반의 C++ 2."

Similar presentations


Ads by Google