Inventory
-
정적객체의 종류@ 16. 1 ~ 17. 1/면접관련 2017. 1. 5. 00:36
정적 객체(static)는 자신이 생성된 시점부터 프로그램이 끝날 때까지 살아 있는 객체(애초에 스택객체, 힙 기반 객체는 될 수가 없다.)정적 객체도비지역 정적 객체(4가지 경우)와(1 전역객체, 2 네임스페이스 유효범위에서 정의된 객체, 3 클래스 안에서 static으로 선언된 객체,4 파일 유효범위에서 static으로 정의된 객체)지역 정적개체로(1가지)나뉜다.(5 함수 안에서 static으로 선언된 객체)총 다섯 종류가 된다. 아래처럼 다른 소스cpp에 정의된 비지역 정적 객체를 직접적으로 서로 사용하는 짓거리는 하지말자..a.cpp 또는 a.hclass A{public:......}extern A aa; //전역 변수로 설정!!! 이게 위험 이건 이게 비지역 정적객체라고 한다!extern은 외부..
-
객체 생성 및 소멸자에 절대로 가상 함수 호출금지@ 16. 1 ~ 17. 1/면접관련 2017. 1. 5. 00:09
C++ 생성자, 소멸자에서는 가상 함수를 호출하면 절대 안됩니다. 이것은 다른 OOP 언어에서는 지원되는 기능입니다. 하지만 왜 C++에서는 안되는 걸까요? 이유를 알아보도록 하죠. 예를 들어서 설명하겠습니다. 스크롤바 컨트롤를 만들어야 하는데, 스크롤바는 종류가 2개입니다. 수직스크롤바, 수평스크롤바.그렇다면, 추상 스크롤바 클래스를 만들고 거기서 상속받은 수직,수평 스크롤바 클래스를 만드는게 좋겠죠?대부분의 기능은 추상클래스에 구현해놓고 수직,수평 스크롤바의 차이점만 파생 클래스에서 지정할 수 있도록 순수 가상 함수를 만들었습니다.스크롤바 생성자는 Rect클래스를 받는데 Rect클래스 멤버인 left, top, right, bottom 중 수직스크롤바는 top, bottom을, 수평 스크롤바는 lef..
-
컴파일과정 정리 / cpp와 h를 나누는 이유?@ 16. 1 ~ 17. 1/면접관련 2017. 1. 4. 23:35
c언어등은 고급언어로 프로그래머가 작성하기는 쉽지만 cpu가 그대로 이해할 수 없다. 일련의 컴파일 과정을 거쳐서 cpu가 이해할 수 있는기계어로 번역이 되어야 한다. 그 과정을 컴파일 과정이라고 하고, 그 과정을 이해해야지 ㅇ최적화 등에 이용할 수 있다. 컴퓨터 프로그램의 개발은 코드 작성(프로그래밍)부터 시작된다.이렇게 작성된 코드는 사용자(개발자)가 컴퓨터가 수행해 주기를 원하는 내용을 기술한 것이지만, 컴퓨터가 이해할 수 있는 문법(언어)이 아닌 사용자가 이해할 수 있는 문법이다.따라서 작성된 코드는 '컴파일(Compile)' 과정을 거쳐 컴퓨터가 이해할 수 있는 언어로 변환되며, 컴파일된 파일을 '오브젝트 파일(Object File)'이라고 부른다. 일반적으로 하나의 프로그램은 여러 개의 오브젝..
-
함수객체란? 일반함수와의 장단점@ 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벨류이다. 왜냐면 영속성있는 객체의 원래값을 복사하고 영속성 있는 개체의 값을..