본문 바로가기

프로그래밍 기초/C++7

가상함수 - 동적 바인딩과 정적 바인딩 가상함수란? 가상함수를 알아보기 전에 바인딩에 대해 알아보자. 바인딩이란? 프로그램을 실행하면 컴파일을 하고 실행코드가 만들어진다.실행코드에서 함수 호출부분을 보면 함수가 그대로 정의되어 있지 않고 함수가 정의된 부분의 주소값이 있어서 함수를 찾아가서 실행할 수 있다.이 때 함수 호출부와 정의부를 연결시켜주는 것이 바인딩이다. 바인딩에는 정적 바인딩과 동적 바인딩이 있는데 바인딩이 결정되는 시점에 따라 나뉜다.정적 바인딩은 컴파일 시에 바인딩 할 주소가 결정되어 함수 호출 시에는 이미 결정되어 있고,동적 바인딩은 컴파일 시에 바인딩 할 주소가 결정되지 않고 함수 호출 시에 결정된다. 일반 함수는 정적 바인딩을 하며 컴파일 시에 인스턴스의 타입에 따라 바인딩 될 주소가 결정되기 때문에 클래스를 상속받아 함.. 2017. 5. 31.
네임스페이스(namespace)란? C++를 공부해본 사람이라면 namespace가 무엇인지 들어보았을 것이다. C++에서는 printf 대신에 iostream에서 제공하는 cout을 쓴다고 배웠다. 그런데 cout을 쓰기 위해서는 전처리기 밑에 using namespace std; 를 적어놓아야 사용할 수 있다. 아니면 std::cout으로 사용을 해야 한다. 이미 알고 있겠지만 namespace에 대해 공부해보자.우리가 회사에 가게 되면 개인프로젝트는 절대 없다. 전부 팀으로 진행되는 프로젝트이고 여러 사람이 코드를 짜서 나중에 합치거나 좋지 않은 코드를 버리거나 한다. 근데 두 개의 팀에서 작업을 한 뒤 나중에 코드를 합쳤을 때를 생각해보자. 두 개의 팀에서 작성한 코드 중 클래스 이름이나 함수의 이름이 같은 것이 있을 수 있다. 실.. 2016. 11. 11.
getchar() 비주얼 스튜디오를 써 본 사람이라면 컴파일을 할 때 f5 또는 ctrl+f5을 사용하여 실행할 것이다. 둘의 차이를 알아보자.f5와 ctrl+f5의 차이는 비주얼 스튜디오가 함께 실행되느냐 실행파일만 독립적으로 실행되느냐의 차이이다. f5입력시 비주얼 스튜디오가 함께 실행되어서 디버그모드로 실행이 된다. 하지만 ctrl+f5로 실행 시 실행파일만 실행이 된다.코딩을 하다가 에러가 나면 에러를 찾아야 하는데 1학년 때의 나는 에러가 어디서 났는지 비주얼 스튜디오의 하단부에 있는 출력 창에서 찾아야만 했다. 몇 번째 줄에서 문제가 생겼는지 나오는 경우에는 찾아서 코드를 읽어보고 찾았지만 나오지 않는 경우에는 해결할 줄 몰랐다.때문에 우리는 디버그모드를 사용해야 한다. 중단점을 찍어 디버그를 통해 에러를 찾고.. 2016. 11. 11.
생성자(Constructor)란? 생성자(Constructor)란 C++에서 클래스의 객체 생성 시 동시에 호출이 되는 것이다. 일반적인 함수처럼 생겼으며 클래스와 동일한 이름을 가지고 있다. 회사 면접이나 테스트에서 영어로 나오는 경우가 있으니 Constructor라는 용어도 꼭 알아두자. (생성자 == Constructor) 눈에 익숙해지도록 계속 언급하겠다.생성자(Constructor)는 따로 명시해주지 않아도 알아서 생성이 된다. (컴파일러가 자동으로 생성해주는 세 가지: 생성자(Constructor), 복사 생성자(Copy Constructor), 대입 연산자 이 세 가지는 눈에 익도록 잠시 읽어보자. 계속해서 언급할 것이다.)해당 클래스의 객체를 생성할 때 생성자(Constructor)의 형태로 생성한다. 이전 장에서 객체는 .. 2016. 11. 11.
인자(Argument)와 매개변수(Parameter) 인자와 매개변수의 차이는 아주 간단한 기초지식이지만 중요한 포인트다. 둘은 비슷한 듯 보여도 사실은 전혀 다른 것을 가리키고 있기 때문에 언급하고 넘어간다.인자는 함수를 호출할 때 함수 매개변수로 넘겨지는 값을 말하고,매개변수, 즉 파라미터는 함수 선언 부에 괄호 안에 정의된 변수이다. 인자를 받아서 그 값을 담는 변수라고 보면 된다.앞선 장에서 봤던 코드를 보자. 여기서 Student라는 생성자를 보자. 생성자에 대해서는 다음 장에서 설명을 할 테니 void Student라는 일반 함수라고 생각하고 이해하도록 하자.class.h의 8번째 줄 Student(string name) 에서 string name이 바로 파라미터이다.class.cpp의 5번째 줄에서 “Jun”이 바로 인자이다. Jun이라는 문자.. 2016. 11. 11.