有希
C++/클래스 사이의 타입 변환 본문
1. 타입 변환 생성자
Dog(const Cat& cat) {
_age = cat.GetAge();
}
//이런 클래스간 변환이 가능하다
dog = (Dog)cat;
2. 타입 변환 연산자
operator Cat()
{
return (Cat)(*this);
}
Cat cat = dog; 가 가능
3. 참조 타입 변환
명시적인 변환은 가능하다, 암묵적인 변환은 불가능 하다
Cat cat;
Dog& dog = (Dog&)cat; //가능
Dog& dog = cat; //불가능
4. 상속 관계에 있는 클래스 간의 변환
1. 값 타입 변환
부모는 자식으로 절대 변환할 수 없다.
자식은 부모로 변환 가능.
2. 참조 타입 변환
부모->자식은 명시적만 가능
자식->부모는 둘 다 가능
정리
값 타입 변환: 비트열도 바꾸고, 논리적으로 말이 되게 바꾸는 변환 (골든 리트리버->개 OK, 놀숲->개 안됨)
참조 타입 변환: 비트열은 그대로 두고, 관점만 바꾸는 변환. 명시적으로 하면 해주긴 한다. 논리적으로 말이 된다면 막써도 변환해주지만, 그렇지 않은 경우(메모리 오염 가능성 존재)에는 암시적으론 안되고 명시적인 경우에만 가능함.
'프로그래밍 > C++' 카테고리의 다른 글
C++/STL/Vector 동작 원리 (0) | 2022.01.31 |
---|---|
C++/캐스팅(Casting) (0) | 2022.01.29 |
C++/malloc(free) vs new(delete) (0) | 2022.01.28 |
C++/메모리 구조 (0) | 2022.01.28 |
C++/순수 가상 함수 (0) | 2022.01.28 |