@ 16. 1 ~ 17. 1/면접관련
-
함수객체란? 일반함수와의 장단점@ 16. 1 ~ 17. 1/면접관련 2017. 1. 4. 22:47
[C++] 함수객체 기본 예제 함수 객체(Function Object)는 함수처럼 동작하는 객체이다.함수처럼 동작하려면 객체가 operator() 를 정의해야 한다. 아래의 예제를 보면 구조체에서 operator() 연산자를 오버라이딩 하고, main에서 해당 구조체를 선언한 후 함수처럼 호출하였다. * 함수 객체의 장점 함수 객체는 함수처럼 동작하는 객체이므로 다른 멤버 변수와 멤버 함수를 가질 수 있고 일반 함수에서 하지 못하는 지원을 받을 수 있다.또한, 함수 객체의 서명이 같더라도 객체 타입이 다르면 서로 전혀 다른 타입으로 인식한다.속도도 일반 함수보다 함수 객체가 빠르다. 함수의 주소를 전달하여 콜백할 경우 이 함수 포인터는 인라인 될 수 없지만 (함수 포인터는 함수가 있어야 하므로 인라인 함..
-
-
C++ 캐스팅 종류@ 16. 1 ~ 17. 1/면접관련 2017. 1. 4. 21:51
상황 캐스트 방법int, double간 변환처럼 허용되는 변환을 명시적 static_cast const 속성제거 const_cast 커스텀 생성자 등 명시적인 변환 static_cast 전혀 관계없는 두 객체 간의 변화 없음 같은 클래스 계층에 속하는 서로 다른 클래스 객체의 포인터(참조)간 변환static_cast , dynamic_cast 전혀 관계없는 두 포인터(참조)간의 변환reinterpret_cast 함수 포인터간의 변환 reinterpret_cast
-
L벨류 R벨류 정리@ 16. 1 ~ 17. 1/면접관련 2017. 1. 4. 21:35
흔히 L벨류는 대입 연산자 왼쪽에 있는 값, R벨류는 대입 연산자 오른쪽에 있는 값이라고 하는데..C에서의 개념이도 C++넘어와서는 조금 달라진다. L벨류로 선언된 객체는 단일 표현식을 넘어 서서도 존재하게 된다. 예를 들어 OBJ, *PTR, PTR[INDEX], ++X들은 L벨류이다.R벨류는 임시적으로 표현식이 끝나면 없어지는 값들이다.예를들어 X + Y, 1729(단순 숫자다), X++ 들이 R벨류라는데.. 근데 위에 전위연산자 후위연산자가 왜 틀린 벨류일까?int x = 0으로 선언된 x가 있으면 x는 L벨류이고 영속성있는 객체이다.++x : 값을 증가 시키고 영속성있는 객체로 이름을 붙이기 때문이다. 하지만 x++는 R벨류이다. 왜냐면 영속성있는 객체의 원래값을 복사하고 영속성 있는 개체의 값을..
-
부모클래스의 메서드가 오버로딩된 메서드인 경우@ 16. 1 ~ 17. 1/면접관련 2017. 1. 4. 20:43
특정 이름과 파라미터로 메서드를 오버라이딩 하면 파라미터와 관계없이 같은 이름을 가지는 부모클래스의 모든 메서드들이 숨겨진다.A클래스virtual void sh();virtual void sh(int i); B클래스 : public A클래스virtual void sh(); 하게 되면B클래스.sh(1)는 호출이 안된다.A클래스에서 정의한 함수들이 모두 숨겨진다.할 수 있는 방법은 부모의 포인터로 자식의 객체를 가리키고 실행하면 된다. 그냥 모두다 오버라이딩 하는게 낫다. 아래 내글 다시 참고 출처: http://namoeye.tistory.com/entry/%EB%A9%94%EC%84%9C%EB%93%9C-%EC%98%A4%EB%B2%84%EB%9D%BC%EC%9D%B4%EB%94%A9virtual%EC%..
-
생성자 및 대입연산자 관련 자식에서 부모를 호출해야한다.@ 16. 1 ~ 17. 1/면접관련 2017. 1. 4. 20:29
자식클래스의 생성자에서도 부모 클래스의 생성자를 호출해줘야한다.알겠는고..? 18. 자식클래스에 삽입된 디폴트 대입 연산자가 기초 클래스의 대입연산자(디폴트가 아니여도)까지 호출한다자식클래스의 대입연산자(디폴트 말고)정의에서 명시적으로 기초 클래스의 대입 연산자 호출문을 삽입하지 않으면 기초 클래스의 대입 연산자는 호출되지 않아서 기초 클래스의 멤버변수는 복사 대상에서 제외된다. 즉자식클래스& operator=(const 자식클래스& ref){기초 클래스::operator=(ref);}여기서 ref는 자식클래스 참조자인데 이를 기초형 참조자로 매개변수를 선언한 operator= 함수의 인자로 전달이 가능한가?C++ 에서는 AAA형 참조자는 AAA객체 또는 AAA를 직 간접으로 상속하는 모든 객체를 참조할..
-
클래스 생성 순서(부모, 자식)@ 16. 1 ~ 17. 1/면접관련 2017. 1. 4. 20:20
[C++]상속(inheritance)와 객체 생성, 소멸 과정 상속에 대한 세부적인 설명은 생략하고, 상속한 클래스의 객체를 생성하고, 소멸하는 과정이 어떻게 진행되는지 살펴보고자 한다. 그리고 이 글은 생성자와 소멸자에 대한 기본적인 이해가 필요하니 링크를 참고하기 바란다. 복사생성자까지 이해하고 있다면 참 좋은데... 아니다. 생각해보니 복사생성자에 대한 이해도 필요하다. 링크를 참고해서 복사생성자도 보도록 하자. 상속(inheritance) 여러 자료를 보면 상속을 'A is a B'의 관계로 설명하곤 한다. 출처 그림을 보면 자전거가 부모 클래스이고, 산악 자전거, 도로 자전거, 세 번째는 무슨 자전거지? 찾아보기 귀찮으므로 땡땡 자전거. 여튼 산악, 도로, 땡땡 자전거들은 자전거로부터 파생된 것..
-
메서드 오버라이딩의 특수한 경우@ 16. 1 ~ 17. 1/면접관련 2017. 1. 4. 20:06
부모클래스의 메서드가 static인 경우 오버라이딩을 할 수가 없다. 자식클래스에서 부모클래스에 있는 static메서드와 같은 이름의 메서드를 정의하면 두개의 별개인 메서드가 만들어진다.그리고 메서드가 호출되는 객체의 종류에는 영향을 받지 않는다. 즉,문법상 객체를 통해 호출될때 (부모의 포인터) 실제 객체의 타입과는 관계없이 그 객체를 참조하는 있는 타입만이 호출할 메서드를 결정한다는데..(그냥 부모것으로 호출된다고..) class A { public: static void beStatic() { cout