Chapter 16. C++ 형 변환 연산자와 맺는 글

Slides:



Advertisements
Similar presentations
6 장. printf 와 scanf 함수에 대한 고찰 printf 함수 이야기 printf 는 문자열을 출력하는 함수이다. – 예제 printf1.c 참조 printf 는 특수 문자 출력이 가능하다. 특수 문자의 미 \a 경고음 소리 발생 \b 백스페이스 (backspace)
Advertisements

1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
1. 2 차원 배열  배열은 동일한 데이터 유형으로 여러 개의 변수를 사용할 경우 같은 이 름으로 지정하여 간편하게 사용할 수 있도록 하는 것으로서 앞에서 1 차원 배열을 공부하였습니다.  2 차원 배열은 바둑판을 생각하면 되며, 1 차원 배열에서 사용하는 첨자를 2.
01_ 가상 함수를 사용한 다형성의 구현 02_ 오버라이딩
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express Slide 1 (of 27)
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
최윤정 Java 프로그래밍 클래스 상속 최윤정
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 07. 반복실행을 명령하는 반복문.
#include <stdio.h> int main(void) { float radius; // 원의 반지름
Report #2 - Solution 문제 #1: 다음과 같이 프로그램을 작성하라.
-Part2- 제3장 포인터란 무엇인가.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 12. 포인터의 이해.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 01. 이것이 C언어다.
Lesson 9. 예외처리.
Chapter 25. 메모리 관리와 메모리의 동적 할당
Lesson 6. 형변환.
5장. 참조 타입.
제 3장. C보다 나은 C++ II.
C 프로그래밍.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
Chapter 06. printf 함수와 scanf 함수 정리하기
6장. printf와 scanf 함수에 대한 고찰
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 03. 변수와 연산자.
14장. 포인터와 함수에 대한 이해.
14. 예외처리.
10장. 예외처리.
자바 5.0 프로그래밍.
어서와 C언어는 처음이지 제14장.
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 21. 문자와 문자열 관련 함수.
이름 : 황 상 두 전화번호 : 이메일 : PinTool 이름 : 황 상 두 전화번호 : 이메일 :
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
상수와 기본 자료형.
Lesson 2. 기본 데이터형.
6장 데이터 타입(4) 순천향대학교 컴퓨터공학부 하 상 호.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
에어 조건문.
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
2장. 변수와 타입.
자바 5.0 프로그래밍.
Chapter 02. 자바 기본 문법.
8주차: Strings, Arrays and Pointers
C++ Espresso 제11장 예외 처리와 형변환.
객체기반 SW설계 팀활동지 4.
18강. 인터페이스 – II - 인터페이스와 다중상속 - 인터페이스를 통한 로봇 장남감 만들기 프로그래밍
Chapter 13. 템플릿(Template) 1
Chapter 15. 예외처리(Exception Handling)
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
Homework #12 (1/2) 프로그램을 작성하고, 프로그램과 실행 결과를 프린트하여 제출한다.
Lecture 02 프로그램 구조 및 문법 Kwang-Man Ko
7주차: Functions and Arrays
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
Chapter 10 데이터 검색1.
Chapter 27. 파일의 분할과 헤더파일의 디자인
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 23. 구조체와 사용자 정의 자료형2.
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 04. 클래스의 완성.
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 05. 복사 생성자.
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 07. 상속의 이해.
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
Java의 정석 제 8 장 예외처리 (Exception handling) Java 정석 남궁성 강의
2장 자바의 기본문법(1).
13. 포인터와 배열! 함께 이해하기.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 17. 포인터의 포인터.
6장 데이터 타입(5) 순천향대학교 컴퓨터공학부 하 상 호.
Presentation transcript:

Chapter 16. C++ 형 변환 연산자와 맺는 글 윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 16. C++ 형 변환 연산자와 맺는 글

윤성우의 열혈 C++ 프로그래밍 Chapter 16-1. C++에서의 형 변환 연산

모기를 잡으려면 모기약을 써야지~ 윤성우의 열혈 C++ 프로그래밍 static_cast, const_cast, dynamic_cast, reinterpret_cast 문제는 없으나 의도한 바인지 아닌지 알 수 없는 코드 프로그래머의 실수가 분명함! 그러나 컴파일러는 에러를 일으키지 않는다.

dynamic_cast: 상속관계에서의 안전한 형 변환 윤성우의 열혈 C++ 프로그래밍 dynamic_cast<T>(expr) 포인터 또는 참조자인 expr을 T 형으로 변환하되 안전한 형 변환만 허용을 한다. 여기서 말하는 안전한 형 변환이란, 유도 클래스의 포인터 및 참조자를 기초 클래스의 포인터 및 참조자로 형 변환하는 것을 의미한다. 의도한 바 일수 있다. 그리고 이러한 경우에는 staic_cast 형 변환 연산자를 사용해야 한다.

static_cast: A 타입에서 B 타입으로 윤성우의 열혈 C++ 프로그래밍 static_cast<T>(expr) 포인터 또는 참조자인 expr을 무조건 T형으로 변환하여 준다. 단! 형 변환에 따른 책임은 프로그래머가 져야 한다. static_cast 연산자는 dynamic_cast 연산자와 달리, 보다 많은 형 변환을 허용한다. 하지만 그에 따른 책임도 프로그래머가 져야 하기 때문에 신중히 선택해야 한다. dynamic_cast 연산자를 사용할 수 있는 경우에는 dynamic_cast 연산자를 사용해서 안전성을 높여야 하며, 그 이외의 경우에는 정말 책임질 수 있는 상황에서만 제한적으로 static_cast 연산자를 사용해야 합니다

static_cast: 기본 자료형 간 변환 윤성우의 열혈 C++ 프로그래밍 int main(void) { int num1=20, num2=3; double result=20/3; cout<<result<<endl; . . . . } C 스타일 형 변환 double result=(double)20/3; double result=double(20)/3; C++ 스타일 형 변환 double result=static_cast<double>(20)/3; static_cast는 기본 자료형간 형 변환도 허용한다. int main(void) { const int num=20; int * ptr=(int*)&num; *ptr=30; cout<<*ptr<<endl; float * adr=(float*)ptr; cout<<*adr<<endl; . . . . } static_cast 연산자는 ‘기본 자료형 간의 형 변환’과 ‘클래스의 상속관계에서의 형 변환’만 허용! C언어의 형 변환 연산자는 왼편에서와 같은 경우에도(모든 경우에) 형 변환을 허용. 따라서 제한적으로 허용하는 static_cast 연산자가 훨씬 안정적이다. const 제거! 상속과 관계 없는 포인터 형으로의 형 변환

const_cast: const의 성향을 제거하라! 윤성우의 열혈 C++ 프로그래밍 const_cast<T>(expr) expr에서 const의 성향을 제거한 T형 데이터로 형 변환하라!

reinterpret_cast: 상관없는 자료형으로의 형 변환 윤성우의 열혈 C++ 프로그래밍 서로 아무런 관련이 없는 두 클래스 reinterpret_cast<T>(expr) expr을 T 형으로 형 변환하는데 expr의 자료형과 T는 아무런 상관관계를 갖지 않는다. 형 변환의 결과는 예측하지 못한다. reinterpret_cast 형 변환 연산자의 적절한 사용의 예 바이트 별 정수의 크기 출력하기 실행결과

dynamic_cast 두 번째 이야기: Polymorphic 클래스 윤성우의 열혈 C++ 프로그래밍 형 변환 연산의 기본규칙 아래의 예에서 보이듯이 기초 클래스가 Polymorphic 클래스라면 유도 클래스로의 포인터 및 참조형으로의 형 변환은 허용이 된다!

dynamic_cast와 static_cast의 차이 윤성우의 열혈 C++ 프로그래밍 기초 클래스가 Polymorphic 클래스라면 유도 클래스의 포인터 및 참조형으로의 형 변환에는 dynamic_cast 연산자와 static_cast 연산자 모두 사용할 수 있다. 하지만 여전히 dynamic_cast 연산자는 안전성을 보장한다. 반면 static_cast 연산자는 안전성을 보장하지 않는다. 형 변환 OK! 형 변환 실패! NULL 반환 dynamic_cast 연산자는 위의 형 변환을 허용하지 않는다. 반면 static_cast 연산자는 허용을 한다. 물론 그 결과는 보장받지 못한다.

bad_cast 예외 윤성우의 열혈 C++ 프로그래밍 실행결과 참조자 ref가 실제 참조하는 대상이 SoSimple 객체이기 때문에 SoComplex 참조형으로의 형 변환은 안전하지 못하다. 그리고 참조자를 대상으로는 NULL을 반환할 수 없기 때문에 이러한 상황에서는 bad_cast 예외가 발생한다.

윤성우의 열혈 C++ 프로그래밍 Chapter 16-2. 맺는 글 윤성우 저 열혈강의 C++ 프로그래밍 개정판

Chapter 16이 끝났습니다. 그 동안 수고 많으셨습니다.