프로그래밍/C++ 스피비 2011. 3. 20. 23:24
C++ cast 1. static_cast : A 타입에서 B 타입으로 - C 캐스팅과 동일한 형태를 가진다. - 지정된 타입으로 변환이 가능하다. - 업캐스팅, 다운캐스팅 모두 가능하다. 2. const_cast : const 혹은 volatile의 성향 삭제 - 상속관계 이동, 기본연산자 캐스팅에는 사용할 수 없다 3. dynamic_cast : 상속관계에서 안전 형 변환 (가상함수가 없는 형태에서는 사용할 수 없다) - 부모 포인터나 참조자의 타입을 자식 클래스 또는 형제 클래스의 타입으로 변환해준다. - 실패 시에는 NULL 반환 - 가상함수 테이블을 사용하기 때문에 가상함수가 없는 상속관계에서는 사용할 수 없다. (가상함수 테이블이 없으면 캐스팅 불필요) - 매우 고비용의 캐스팅이므로 가능하면 ..
프로그래밍/C++ 스피비 2011. 3. 20. 23:08
초기화리스트 [출처] C++ 클래스 생성자에서 초기화 리스트 사용해야하경우|작성자 연금술사 C++에서는 클래스를 생성하는데 호출되는 생성자라는 특수한 형태의 함수가 있습니다. class A{}; 가 정의되어 있을때 생성자의 이름은 A(){}이고, 리턴 타입은 존재하지 않습니다. 근데, 생성자는 오버로딩이 가능합니다. 즉, 넘겨줄 인자의 형식을 달리해서 다양한 생성자를 둘 수 있다는 말입니다. 또한 생성자는 보통 다음과 같이 표현됩니다. A(int a, int b) { m_a = a; m_b = b; }; 그런데 이런 방식 말고 초기화 리스트(Member Initialization List)를 사용해서 클래스를 초기화할 수 있습니다. 초기화 리스트는 다음과 같이 표현됩니다. A(int a, int b) :..
프로그래밍/C++ 스피비 2011. 3. 20. 23:04
구조체와 배열의 대입관계 2편이다. 1편 링크를 해놓겠다. 2011/03/09 - [프로그래밍/C언어] - 배열의 대입과, 구조체의 대입의 차이? 1. 구조체는 대입이 가능하다!!!!!!!! 2. 배열과 클래스는 대입이 불가능하다. 배열같은 경우는 크기만큼 메모리카피를 해주는게 일반적이고, 클래스는 원래는 불가능하지만 연산자 오버로딩이란것을 해서 가능하게 만들수 있다!!!!!!!!!!!!!!!
프로그래밍/C++ 스피비 2011. 3. 20. 23:00
클래스 만들면 저절로 생성되는것들(디폴트) 1. 디폴트 생성자 2. 디폴트 소멸자 3. 디폴트 복사생성자 여기서 중요한것은 사용자가 하나라도 생성자를 재정의한순간 디폴트 생성자는 없어진다라는것!
프로그래밍/C++ 스피비 2011. 3. 20. 22:59
깊은복사와 얕은복사의 정리 2011/03/09 - [프로그래밍/C언어] - 얕은 복사,깊은 복사 보통 디폴트복사생성자가 작동하는 방식이 얕은복사다 . (1:1 대응으로 인한 값 복사) 일반 경우에는 이러한 얕은복사를 사용해도 문제가 생기지 않지만 복사하는 값이 주소일 경우에는 문제가 생긴다. 동적할당으로 얻은 메모리를 이용할 때 얕은복사를 하면 메모리 공간은 그대로지만 그것을 가리키는 포인터는 양쪽 객체에서 똑같이 갖고 있기 때문에 어느 한 쪽에서 객체가 메모리를 해제하면 다른 쪽에서의 접근은 신뢰할 수 없는 메모리 공간이 된다. 이러한 경우를 해결하기 위해서 생긴게 깊은복사 인데, 동적 할당된 메모리를 포인터만 복사해서 생기는 얕은복사의 문제점을 해결할 수 있는게 깊은복사인데 깊은복사란 메모리 속의 내..