본문 바로가기

컴퓨터/C++5

c++ 함수포인터 부터 std::function까지 개념 및 기초함수의 시작 번지를 가르키는 포인터 (어셈블리 언어의 호출 스택을 생각해보자)포인터 형식 자체가 다르다.리턴타입(*함수 포인터 이름)(인수목록)함수 : int Func(int a) => 포인터 : int(*funcPtr)(int)함수의 시작번지에 들어가기 앞서 인수들의 목록과 리턴 형식(주소) 정보를 (스택에) 저장해야하므로함수 포인터 사용 방법대입 & 호출대입 : funcPtr = Func; (괄호없이 단독으로 사용된 함수명은 함수의 시작 번지를 나타내는 포인터 상수.)호출 : 원칙적으로 (*funcPtr)(2); 하지만 컴파일러는 funcPtr(2); 도 동작하게한다.인자가 잘못 들어가거나 리턴형식을 잘못된 타입으로 받으면 당연히 컴파일 에러, 함수 포인터 형식이 복잡한 이유하나의 고유한.. 2015. 3. 10.
FSM과 State 패턴 FSMFSM은 주로 Flying Spagetti Monster, 혹은 Finite State Machine를 의미한다.Flying Spagetti Monster여기서는 Finite State Machine을 설명하려고 한다.Finite State Machine유한 상태 기계란?유한 상태 기계는 자신이 취할 수 있는 유한한 갯수의 상태들을 가진다.그리고 그 중에서 반드시 하나의 상태만 취한다.현재 상태는 특정 조건이 되면 다른 상태로 변할 수 있다.유한 상태 기계는 가능한 상태들의 집합과 각 상태들의 전이 조건으로 정의 될 수 있다.상태들의 노드와 그 노드들을 연결하는 조건의 엣지로 표현할 수 있다(그래프).전구의 예전구는 ON / OFF 두가지 상태를 갖는다.전구는 반드시 둘중 하나의 상태만 취한다.각 .. 2015. 3. 10.
c++의 여러가지 생성자들 여러가지 생성자1.디폴트 생성자클래스 만들면 기본으로 깔리는 생성자 혹은 인수가 하나도 없는 생성자. 다른 생성자가 생기면 기본빵 생성자는 사라진다. 기본빵 생성자는 보통 멤버변수들에게 0이나 NULL값을 넣어주지만, 쓰레기값에 주의하면서 직접 디폴트 생성자를 만들어 주는 편이 좋다.인수가 1개 이상 있는 생성자만 있으면 기본빵 생성자는 사라졌으므로 아래 코드는 오류가 난다. 값 안넣고 선언하고 싶다면 디폴트 생성자를 만들어야 한다.class CClass { public: CClass(int a){ m_Num = a; } int m_Num; } CClass(); //오류 CClass classArr[MAX_ARR_NUM]; //오류 //배열 초기화할때 아무 값도 없으니까 디폴트 생성자를 호출할 건데 그게.. 2015. 3. 10.
c++의 static 변수에 대하여 static 변수에 대하여1. Static일단 전역변수, 하지만 접근에 지역적인 제한이 있다.사용하려면 헤더가 아닌 실행부(cpp)에서 초기화를 해주어야 한다.OOP의 캡슐화를 지키면서 전역처럼 쓸수 있는 방법2. class의 비밀class의 인스턴스를 생성하면 멤버변수들만이 독립적인 메모리에 할당되며 멤버 함수는 기존 클래스에 선언된 함수를 호출하여 사용한다.그래서 클래스의 맴버함수들은 기본적으로 this를 인자로 받는다. 그리고 그걸 숨긴다.void Point::printAge(){ printf("(%d, %d)", m_X , m_Y); } //이런 멤버함수는 모든 클래스가 공유하기 때문에 원래 컴파일러는 이 함수를 이렇게 번역한다. void Point::printAge(Point& this){ pr.. 2015. 3. 10.