본문 바로가기

전체 글

(110)
c++ 16 ( 파일 입출력 2 ) vs code에서 Solution Explorer에서 마우스 오른쪽 버튼을 클릭하고 Open folder in File Explorer 를 클릭하면 만들어진 폴더가 나온다. fopen( ... ) fopen을 사용할 때에는 꼭 습관처럼 fclose( ... ) 먼저 아래쪽에 만들어 두고 그 사이에 코딩을 하는 것이 가장 좋다 이는 다른 프로그래밍에서도 마찬가지인데 다른 프로그래밍 언어에서도 똑같이 파일을 열고 파일을 닫고 하기 때문이다. fclose( ... ) fclose( ... ) 함수는 nullptr을 파라미터로 받았을 경우 런타임 오류가 발생하게 된다. fopen을 "r" 옵션으로 열었을 경우에 파일이 없다면 nullptr을 리턴하게 되는데 이 경우를 생각해서 프로그래밍을 해야 한다. fopen..
c++ 16 ( 파일 입출력 1 ) File pointer 파일 포인터는 물리적 디스크의 파일에 접근하는 타입 구성요소에는 다음의 3가지가 있다. 파일의 시작 지점 파일의 종료 지점 현재 읽고 있는 위치 파일 포인터는 파일이 하드디스크에 저장이 되는데 하드디스크는 사실상 끈 형태로 되어있다. 디스크는 그냥 길다란 끈이 막 늘어져있다. 내가 원하는 파일이 텍스트 파일이다 하면 컴퓨터는 그 텍스트 파일의 처음 지점에 포인터를 갖다 놓게 된다. 모든 메모리는 byte의 길다란 끈으로 이루어져있고 그 메모리를 읽이 위해서 어떤 포인터가 항상 존재하는데 그 포인터를 통해서 그 위치에 있는 데이터를 가져와서 적당히 처리를 해서 화면에 뿌리든 네트워크로 보내든 하는 것 파일도 똑같은 메모리 구조를 갖고있기 때문에 파일에 접근하기 위해서는 파일 포인터 ..
c++ 15 ( 기본 자료구조 - STL 기초 자료구조 활용 ) std::vector std::vector는 vector 헤더파일에 작성되어 있다. 이 std::vector를 활용하게 되면 유동적인 배열을 편안하게 활용할 수 있다. std::vector는 우리가 일반적으로 배열을 사용하듯 사용할 수 있으며 std::vector는 iterator(순회자)를 통해 각각의 원소를 순회할 수 있고 이 순회자를 이용해 algorithm에 작성되어 있는 sort( ... ) 함수를 이용해 값을 정렬할 수 있다. #define _CRT_SECURE_NO_WARNINGS #include #include int main() { std::vector myvec = {10, 20, 30}; // 초깃값 설정 가능 myvec.push_back(100); myvec.push_back(200..
c++ 14 ( Generic 이라고도 불릴 수 있는 개념 ) STL Standard Template Library의 약자 STL을 사용하면 각종 자료형에 구애받지 않는 통합 라이브러리 (유용하게 활용가능한 소스코드나 모듈)을 만들 수 있으며 C++의 STL은 다른 언어 Generic과는 다르게 굉장히 빠른 실행 퍼포먼스를 약속한다. template STL 클래스에서 타입을 나중에 지정하겠다고 명시하는 방법 여기에서 이 T가 나중에 지정할 타입이름이 된다 안에 있는 내부의 클래스의 어떤 타입을 나중에 이것의 인스턴스를 만들 때 지정할 수 있도록 선언 #define _CRT_SECURE_NO_WARNINGS #include #include template // 이 클래스 내부에는 타입이 지정되지 않은 어떤 것이 있다, 타입의 지정을 뒤로 미룰 수 있다 class My..
c++ 13 ( const / static / extern ) const const 는 상수라는 뜻 이다. 상수라는 것은 프로그램이 시작되면서 끝날때 까지 절대 변하지 않는 값을 의미 하지만 진정한 의미로서의 const는 define 매트로이며, const 키워드를 이용해 만든 변수는 상수이지만 '저장공간'을 갖고 있는 변수이며 실질적으로 프로그램 내부에 박혀있는 값은 아니다. 클래스 내부에서의 const 멤버 이 const라는 것이 실제로 변수로서 저장공간을 갖고 있다는 것을 확인하는 방법은 클래스 멤버를 const로 선언하는 것이다. 이렇게 const로 선언된 클래스 멤버 변수는 선언과 동시에 초기화를 하거나, 클래스 생성자에서 초기화를 해줘야 한다. 생성자에서 초기화를 해 줄 때에는 변수이름 (초기값) 과 같은 방법을 이용해 초기화를 한다. #define _C..
c++ 12 (문자열과 네임스페이스 그리고 레퍼런스 타입) std::string : 여러가지 문자열 사용의 불편한 점을 해결한 클래스 C++에서 문자열을 활용하기 위한 클래스형 문자열 타입 string이 헤더파일에 정의되어 있다. std::string에는 문자열을 이용한 여러가지 동작을 할 수 있도록 여러 멤버함수가 정의되어있다 또한 문자열의 포인터를 자동으로 관리해주기 때문에 하나하나 포인터를 관리할 필요 없이 정적인 형태의 클래스 인스턴스로 활용할 수 있다. #include 을 선언, #include 을 할 필요가 없다 std::string은 일반적으로 정적인 형태의 클래스 인스턴스로 선언되고 사용된다. 앞으로 배울 C++에서 제공하는 기본 STL 자료구조의 클래스 역시 일반적으로 정적인 형태 정적인 인스턴스로 만드는 이유 1. std::string* myS..
c++ 11 (실행구조 / Bitwise / 순수 가상함수) Bitwise 연산 비트를 기준으로 논리연산을 하는 것을 비트와이즈 연산이라고 한다 비트와이즈 and : & 연산자를 활용한다 비트와이즈 or : | 연산자를 활용한다 왼쪽 쉬프트 : > 연산자를 활용한다 integer가 8비트라고 가정시 v1 0 0 0 0 0 0 0 1 v2 0 0 0 0 0 0 1 0 bitwise | (or) 를 하게 되면 말 그대로 비트 별로 | (or) 연산 0 0 0 0 0 0 1 1 00000011 이 10진수로 3이 나옴 bitwise & (and) 연산을 하게 되면 0이 나온다 #include int main () { int v1 = 1; // 0001 int v2 = 2; // 0010 int v3 = 3; // 0011 int bitwise_or = v1 | v2; ..
c++ 10 (C++ 의 컴파일에 관하여 - LNK 오류에 대처하기) 소스파일 - 오브젝트 파일 소스 파일은 컴파일이 될 때 소스파일 하나하나가 오브젝트 파일을 생성하게 된다. (.cpp -> .obj) 맥이나 리눅스의 경우 .o 파일이 된다. c++의 컴파일은 이렇게 만들어진 obj 파일을 묶어서 하나의 실행파일을 만들어내게 된다. obj파일은 cpp파일이 컴파일 되면서 나오는 중간 파일 그래서 obj파일에 문제가 있다면 cpp파일에 문제가 있다는 거 그런데 이것을 헤더파일에서 찾으려고 하면 안된다. 왜냐하면 헤더파일에 대한 에러는 절대 나오지 않는다. c++는 cpp파일을 기준으로 컴파일을 하기 때문 cpp 파일이 모든 include를 다 한 다음에 그 cpp파일을 기준으로 obj 파일을 만들어내게 된다 이 각각의 헤더파일들을 include 한 cpp파일에서 obj 파..