본문 바로가기

컴퓨터61

c++의 가상함수 가상함수1. 가상함수 기본 개념집고 넘어가는 다형성 : 자식은 부모의 역할을 할 수 있는데, 부모는 자식의 역할을 할 수 없다.포인터 타입의 양면성 : 포인터가 가르치는 객체의 타입(동적 타입), 포인터가 선언될 당시의 타입(정적 타입)int* a; char b = 'c'; a = &b; //a의 정적 타입은 int, a의 동적 타입은 char객체 포인터에다 '기본' 함수를 호출하면 정적 타입에 명시된 함수가 호출된다. (정적 바인딩)객체 포인터에다 '가상' 함수를 호출하면 동적 타입에 명시된 함수가 호출된다. (동적 바인딩)동적 바인딩을 구현하는 방식은 컴파일러마다 다르지만 일반적으로 vTable으로 구현한다.virtual함수를 생성하면 그 클래스 이하 모든 자식 클래스에게 vPtr을 멤버로 (몰래)생.. 2015. 3. 10.
cocos2d-x 의 기본 구조 1. Nodecocos2d-x의 기본 단위거의 모든 객체들은 이 Node클래스를 상속받는다. 이것만 잘 알아도 cocos2d-x의 많은 부분을 알수 있다.http://www.cocos2d-x.org/reference/native-cpp/V3.0alpha0/d3/d82/classcocos2d_1_1_node.htmlNode의 멤버들..-position : 위치 값,-scale : 크기 배율값,-rotation : 회전 각도,-anchor point : 앵커 포인터(위치값의 기준 점을 설정 0~1까지 float),-size : width, height,-visible : 보이는지 여부,-z-order : 출력시 위에 보이느냐 아래 보이느냐를 결정하는 수치node->setPosition(Point(0, 0)).. 2015. 3. 10.
Modern Effective C++ Item 6 : auto로 안되면 명타초 쓰자 tem 6 : auto가 안되면 명타초를 쓰자.auto의 빈틈 : 특수한 벡터 std::vectorstd::vector는 확장가능한 배열 템플릿 클래스로 임의의 타입 T에 대한 연속적인 배열을 만들어준다. 그런데 T가 bool 인 경우 메모리 낭비를 막기 위하여 특수하게 다른 형태로 구현된다. std::vector은 각 원소들을 하나의 비트로 표현하고 연속된 비트로 bool의 배열을 만들어 준다.일반적인 벡터 std::vector의 operator[]의 리턴 형식은 T&이다. 그러나 C++ 에서 하나의 비트에 대한 참조가 불가능하기 때문에 일반적인 방법으로는 배열의 원소에 접근하는 것이 어렵다. 이 해결을 위해 마치 bool&처럼 작동하는 프록시 오브젝트 std::vector::reference가 사용된.. 2015. 3. 10.
Modern Effective C++ Item 5 : auto는 우월하다 Item 5 auto는 우월하다.auto의 개나소나 알 수 있는 장점일반 타입은 초기화 하지 않은 변수를 허용하므로 분명하게 정의되지 않는 경우가 있다. 반면 auto는 초기화 하지 않고서 사용할 수 없다. int x1; //초기화 되지 않은 상태로 작동 auto x2; //컴파일 에러 auto x3 = 0; //x3이 잘 정의된 상태로 작동타입명이 지나치게 긴 경우 가독성을 해친다. 이 경우 auto를 사용하여 간결하게 표현할 수 있다. C++14의 경우 람다의 매개 변수 타입에 auto를 사용할 수 있다. std::function derefUPLess = [](const std::unique_ptr& p1, const std::unique_ptr& p2) { return *p1 < *p2; }; //.. 2015. 3. 10.