본문 바로가기

Programming/C++

파일분할 사실 예제로 설명하는 소스들은 이해를 돕기위해서 짧은 소스들을 사용하는데요. 나중에 정말 몇 십명, 몇 백백명 사람들끼리 프로그램을 만드는 프로젝트를 한다고하면 소스가 엄청 복잡해질겁니다. 그래서 클래스 선언부, 클래스 정의부, 소스부를 나눠서 작업을 하게됩니다. 그렇다면 소스를 과연 어떻게 나누는지에 대해서 알아보도록 하겠습니다. 그전에!!!! 1. 헤더파일의 역할2. #ifndef ~ #endif3. 둘 이상의 파일을 컴파일 하는 방법4. 링커의 역할 위 4가지에 대해서 먼저 공부하시길 바랍니다.!!!! - 클래스 선언부 클래스 선언부는 "헤더파일"을 만들어서 저장합니다. Car 클래스와 관련된 정보이기 때문에 필요한 위치에 쉽게 포함될 수 있도록 하기 위해서 헤더파일에 저장하게 됩니다. - 클래스 .. 더보기
클래스와 객체 C++의 클래스는 C에서의 구조체와 매우 닮았습니다.물론 C++에서도 구조체를 사용할 수 있구요. 클래스는 구조체와 똑같이 선언합니다. 단지 이름이 class 이죠. 클래스는 구조체와 다르게 변수를 선언하지 못합니다. 구조체와 클래스의 차이를 아시겠나요? 구조체의 변수에는 접근이 가능하지만 클래스의 변수에는 접근이 불가능 합니다. 그래서 클래스에서 사용하는 것이 있습니다. 바로 "접근제어 지시자" 입니다. 접근제어 지시자에는 public, private, protected가 존재합니다. public은 어디에서나 접근이 가능하고, private는 클내스 내부에서만 접근가능하며, protected는 상속관계에서 사용됩니다. 이렇게 public:을 써주게되면 speed에 접근이 가능하게 됩니다. 그러면 아무것.. 더보기
new & delete c언어에서는 동적할당시에 malloc 과 free를 사용했었습니다. c++에서는 malloc과 free를 new와 delete로 대신합니다. c에서 malloc 과 free를 다음과 같이 사용합니다. using namespace std;가 있다는건 함정;;;;;;; 일단 c에서는 malloc의 반환형이 void형이기 때문에 (char*)를 사용해서 형변환을 시켜주고, 얼만큼 사용할지를 정해야 하므로 sizeof(char) X 개수를 해줘야 합니다. 하지만 new 와 delete는 조금 다릅니다. new는 그냥 어떤 변수형태로 사용할 지만 사용하면 그냥 끝입니다. 배열도 마찬가지구요. 그런데 delete할때는 유의해야 할 사항이 있습니다. delete [] arr; 배열을 delete할때는 위의 코드를 작.. 더보기
참조자와 함수 C에서부터 계속해서 나오고 또 나오는 함수이야기가 C++에서 나오게 되네요. 정말.... 함수로 시작해서 함수로 끝나네요. 먼저 사전지식이 필요한데요. Call by value 와 Call by reference 입니다. (Call by address도 있던데 뭐 reference와 비슷합니다. 굳이 따로 정의할 필요는 없다고 생각되네요.) 바로가기: (c 포스팅하면서 추후 수정하겠습니다.) 각각 Call by Value와 Call by Reference 입니다. Call by Value는 함수 내에서 만 변경되고, 함수 밖에서는 변경되지 않습니다.Call by Reference는 함수 외에서 값을 받아와서 변경이 가능합니다. 어렴풋이 기억이 나시나요?? 위 예제를 보시면 받는 매개변수가 참조자로 되어있.. 더보기
참조자 Reference 참조자가 무었인지에 들어가기 앞서서 포인터를 잠깐 알아보도록 하겠습니다. 변수 num에 123이라는 값을 넣고 num의 주소값을 po에 넣고..... 등등 있습니다. 이 소스를 보고 이해를 하셨다면 포인터를 잘 이해하고 계신거겠죠. 저는 다 까먹었습니다. ㅠㅠhttp://keybreak.tistory.com/149http://keybreak.tistory.com/152 위 소스에서 처음보는 선언이 있습니다. int &num2 = num; 인데요. num2의 주소값에 num의 변수를 넣어주는걸까요? 어디 이상한 선언이 하나 타나났습니다.이 이상한 선언이 바로 참조자 라는 것인데요. 참조자는 별명과 같습니다. 자신의 이름이 있지만 별명을 부르는 경우도 있죠. 참조자가 바로 그런것 입니다. 그러면 그 이상한 .. 더보기
자료형 bool 자료형 bool은 C언어에서는 사용되지 않다가 최근에 사용되는 것으로 알고 있습니다. 아마 Visual Studio의 상위버전들에서 가능하겠죠. 자료형 bool은 원래 C++에서 사용되던거라서 C++ 자료형으로 많이 알고 있다고 합니다. C에서는 참과 거짓을 나타낼 때, 0과 1을 사용했습니다. 0은 거짓을 나타내고, 1은 참을 나타냈습니다. 그래서 C에서 무한루프를 돌릴려고 할때 while(1){}을 많이 사용해보셨을 겁니다. C와 C++을 배우면서 혼동하기 쉬운게 true =1, false =0 이라는 것입니다. true는 그저 true고 false는 false 입니다. 절대 1과 0이 아닙니다.의미상 1과 0으로 사용되지만 같다는건 아니라는 거죠. 제목으로 자료형 bool 이라고 썼습니다. bool.. 더보기
using C++을 코딩하면서 정말 불편하다고 느끼는게 std::cout std::cin std::endl; 이렇게 std::을 적어줘야 한다는 것 입니다.정말 불편해요..... 이름공간이라는 것을 배웠으니까 std::cout이 어떻게 이루어져있는지 이해 할 수 있습니다.std 라는 이름공간의 cout를 사용하겠다는 거죠. 하지만 정말 편리한 기능이 있습니다. using namepsace std; 이렇게 하면 std라는 이름공간을 계속해서 사용할거라는 의미입니다. 그래서 std::cout라고 코딩하지 않고 그냥 cout라고 코딩할 수 있게 됩니다. 더보기
이름공간 이름공간 (namespace) 말 그대로 이름공간 입니다. ㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎ ??뭐지 이 ㅂ...ㅅ 은? 이름공간은 공부하면서 느꼈는데 정말 필요하다고 생각되는 부분입니다. C++을 공부하면서 포스팅을 하지만 나중에 더 좋은게 있다고 생각되면 제 생각이 틀렸다고 느끼겠죠. 하지만 지금 상태에서는 이름공간은 정말 좋은 기능이라고 생각됩니다. 이름공간이 어떻게 사용되냐면, A, B, C 사람이 같은 프로젝트를 한다고 가정합니다.그러면 각자 변수를 사용하고 자신만의 코딩스타일로 소스를 작성할 겁니다. 그리고 나서 소스 파일을 합쳐서 빌드를 하려고 하니 같은 변수를 사용하고 있다면 이름을 전부다 바꿔야 하는 상황이 발생합니다.소스 10줄 20줄 하는 거면 그냥 바꾸는게 정신건강에 좋을텐데.... 더보기
인라인 함수 inline 함수는 말 그대로 직역하면 '라인 안으로' 라는 의미를 가집니다. 어떤 의미로 사용되는지 알아보도록 하겠습니다. 매크로 함수에 대해서 알고 계시나요? 모르시면 여기로: http://keybreak.tistory.com/44저도 다 까먹었다는게 함정. ㅋㅋㅋㅋㅋ 매크로 함수의 장점은 실행 속도가 빠르다는 것 입니다. 하지만 정의하기가 조금 힘듭니다. 간단한건 상관없지만 복잡해지면 그렇죠. 두개의 이미지를 보셨을때 다른 점을 찾아보시면 출력하는 값이 test(5) 이냐 (5)*(5) 이냐 차이입니다. 이게 인라인 함수입니다. ? 뭐라고 설명도 안하는데 끝? inline 함수는 함수 몸체부분이 대체되었을때 인라인화 되었다고 합니다.즉, 2번째 이미지가 인라인화 되었다고 할 수 있습니다. 인라인 함.. 더보기
Default Value 디폴트 값 (Default Value) 은 C++에서 기본적으로 설정된 값이라고 생각하시면 됩니다. 예제를 보면서 설명하도록 할께요. Func() 함수를 총 3번을 호출 했습니다. Func 함수는 num1과 num2를 출력하는 아주 간단한 예제 입니다. 그런데 이상한 점은 첫번째는 10과 20이 출력됬고, 두번째는 5와 20, 세번째는 5와 7이 출력됬습니다. Func에 num1은 10으로 num2는 20으로 선언되어있는데 말이죠... 첫번째 Func() 첫번째 Func 함수는 값을 넣어주지 않았습니다. 값을 넣어주지 않았는데 호출을 하려고 보니 10과 20이 있습니다. 여기서 C++은 값이 없었기 때문에 선언되었던 10과 20을 넣어주게 됩니다. 두번째 Func() 두번째 Func는 5만 넣어주었는데요.. 더보기
함수 오버로딩 C언어만 공부하다가 C++를 공부하니 참 새롭네요. 정말 C++ 이름처러 C에서 ++된 언어같습니다.하지만.... 아직 초반이라서 그런지 매번 사용하던 C만큼 편하지 않습니다. ㅠ C언어에서는 다음과 같은 함수사용은 불가능합니다. 같은 이름의 Func1 함수가 있습니다. 인자 값은 int형을 1개 받는 것도 int형을 2개 받는 함수가 있습니다.이 소스를 빌드하면 다음과 같은 오류 목록이 나오게 됩니다. 뭐 C언어를 공부해보셨다면 오류 목록이 어떤 의미로 나타난건지 알 수 있습니다. 기본적으로 Func1이라는 함수가 2개가 존재한다는게 말이 안됩니다. 하지만 C++에서는 가능합니다. 똑같은 소스로 빌드를 했습니다. 단지 확장자 .c 와 .cpp의 차이입니다. 이것이 바로 함수 오버로딩 (Function .. 더보기
C언어와 다른 C++ C++를 처음 공부해보는데 처음 부분이라서 그런지 정말 불편합니다. C언어 처럼 헤더파일을 넣어주고 main 함수도 있고. 변수도 선언하고... 이상한건 std::cout , > a; (a에 값을 대입) 4. 더보기