타입 변환 유형(비트열 재구성 여부)
1. 값 타입 변환
(의미를 유지하기 위해, 원본 객체와 다른 비트열 재구성)
int a=123456789 //2의 보수
float b= (float)a //부동소수점
->1.234567e ... -> 메모리에 다른 값 구성 (비트열 재구성)
2. 참조 타입 변환
(비트열을 재구성 하지 않고 관점만 바꾸는것)
int a= 123456789 ->메모리의 데이터는 같지만 (관점만 바뀌어)
float b= (float)a ->엉뚱한 값 구성
->참조 타입 변환은 포인터 타입 변환과 동일한 룰을 같는다.
안전도 분류
(1) 안전한 변환
특징) 의미가 항상 100프로 완전히 일치하는 경우
같은 타입이면서 크지만 더 큰 가방으로 이동
작은 가방 -> 큰 가방 good (업캐스팅)
char -> short , short -> int ...
int a= 123456789, int64=a ->데이터 손실x
(2) 불안전한 변환
의미가 항상 100프로 일치한다고 보장x
타입이 다르거나, 같은 타입이지만 큰 가방 -> 작은 가방 이동(다운 캐스팅)
프로그래머 의도 분류
(1) 암시적 변환(반드시 경고가 뜸)
이미 알려진 타입 변환 규칙에 따라서 컴파일러가 자동으로 타입변환
(2)명시적 변환
int a
float b=(float) a;
아무런 연관관계가 없는 클래스 사이의 변환
class Warrior | class Bag
(1) 연관 없는 클래스 사이에 값 변환
warrior w
Bag b=(Bag) w -> 거부
만약 생성자에
Bag(const Warrior& w) //타입변환 생성자 작성시
컴파일 통과(일반적 상황은 아니다)
연관 없는 클래스 사이의 참조 타입 변환
Bag& b=w or (Bag&)w ->왜 통과가 될까?
어셈블리 관점 : 포인터 = 참조
상속 관계에 있는 클래스 사이의 변환
(1) 상속 관계 클래스의 값 타입 변환
자식 -> 부모 o , 부모 ->자식 x
(2) 상속 관계 클래스의 참조 타입 변환
부모->자식(명시적으로만 가능)
'c++' 카테고리의 다른 글
C++ 개인 필기(15완) 복사 (0) | 2024.03.04 |
---|---|
C++ 개인 필기(13) 동적 할당 (0) | 2024.02.14 |
C++ 개인 필기(12) static (1) | 2024.02.13 |
C++ 개인 필기(11) 클래스의 연산자 (0) | 2024.02.07 |
C++ 개인 필기(10) 초기화 리스트 (0) | 2024.02.06 |