Presentation is loading. Please wait.

Presentation is loading. Please wait.

Chapter 02. C언어 기반의 C++ 박 종 혁 교수 UCS Lab SeoulTech Tel:

Similar presentations


Presentation on theme: "Chapter 02. C언어 기반의 C++ 박 종 혁 교수 UCS Lab SeoulTech Tel:"— Presentation transcript:

1 Chapter 02. C언어 기반의 C++ 박 종 혁 교수 UCS Lab SeoulTech Tel: 970-6702
SeoulTech 2013-2nd 프로그래밍입문(2)

2 C언어의 복습을 유도하는 확인학습 문제1

3 C언어의 복습을 유도하는 확인학습 문제1(답안)
문제 1의 답안

4 C언어의 복습을 유도하는 확인학습 문제2

5 C언어의 복습을 유도하는 확인학습 문제2(답안)
문제 2의 답안

6 C언어의 복습을 유도하는 확인학습 문제3

7 C언어의 복습을 유도하는 확인학습 문제3(답안)
문제 3의 답안

8 ‘참’을 의미하는 true와 ‘거짓’을 의미하는 false
실행결과

9 자료형 bool bool의 이해 true와 false는 bool형 데이터이다.
실행결과

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

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

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

13 포인터 변수 대상의 참조자 선언 ptr과 dptr 역시 변수이다. 다만 주소 값을 저장하는 포인터 변수일 뿐이다. 따라서 이렇듯 참조자의 선언이 가능하다. 실행결과

14 Call-by-value & Call-by-reference

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

16 참조자를 이용한 Call-by-reference
매개변수는 함수가 호출될 때 선언이 되는 변수이므로, 함수호출의 과정에서 선언과 동시에 전달되는 대상으로 초기화된다. 즉, 매개변수에 선언된 참조자는 여전히 선언과 동시에 초기화된다. 참조자 기반의 Call-by-reference!

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

18 반환형이 참조이고 반환도 참조로 받는 경우 반환의 과정에서 일어나는 일은 다음의 경우와 같다.

19 반환형은 참조이되 반환은 변수로 받는 경우 반환의 과정에서 일어나는 일은 다음의 경우와 같다.

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

21 잘못된 참조의 반환 이와 같이 지역변수를 참조의 형태로 반환하는 것은 문제의 소지가 된다. 따라서 이러한 형태로는 함수를 정의하면 안 된다. 에러의 원인! ref가 참조하는 대상이 소멸된다!

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

23 어떻게 참조자가 상수를 참조하냐고요! const 참조자는 상수를 참조할 수 있다. 이유는,
이러한 것이 가능하도록 한 이유! 이렇듯 매개변수 형이 참조자인 경우에 상수를 전달할 수 있도록 하기 위함이 바로 이유이다!

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

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

26 C++의 표준헤더: c를 더하고 .h를 빼라. 이렇듯 C언어에 대응하는 C++ 헤더파일 이름의 정의에는 일정한 규칙이 적용되어 있다. 이렇듯, 표준 C에 대응하는 표준 C++ 함수는 C++ 문법을 기반으로 변경 및 확장되었다. 따라서 가급적이면 C++의 헤더파일을 포함하여, C++의 표준함수를 호출해야 한다. 표준 C의 abs 함수 대응하는 C++의 표준 abs 함수

27 Q&A


Download ppt "Chapter 02. C언어 기반의 C++ 박 종 혁 교수 UCS Lab SeoulTech Tel:"

Similar presentations


Ads by Google