본문 바로가기

C,C++30

[Effective C++] 항목 10 : 대입 연산자는 *this의 참조자를 반환하게 하자 오늘은 쉬어가는 타임으로 비교적 간단한 주제를 다루려고 한다. 알다싶히 C++의 대입 연산은 여러 개가 사슬처럼 엮일 수 있는 재미있는 성질을 갖고 있다. x = y = z = 15; 위의 코드는 아래와 같이 우측 연관 연산이라는 사슬로 이어진다. x = (y = (z = 15)); 위와 같은 결과가 나오려면 대입 연산자가 좌변 인자에 대한 참조자를 반환하도록 구현되어있다는 의미이다. class Widget { public: Widget& operator= (const Widget& rhs) { return *this; } }; 위의 class가 = 가 아닌 +=,-=,*= 등 매개변수 타입이 일반적이지 않은 경우에도 동일한 규칙이 적용된다. 오늘은 이것으로 끄웃~ㅎㅎ 2019. 7. 24.
[Effective C++] 항목 9 : 객체 생성 및 소멸 과정 중에는 절대로 가상 함수를 호출하지 말자 오늘의 주제는 생성자 혹은 소멸자 안에서 가상 함수를 호출하지 말자! 이다. 파생클래스안의 생성자 소멸자에서 라는 중요한 문장이 빠져있다. 기본클래스나 파생클래스에서 실제로 생성자 혹은 소멸자 안에서 가상함수를 호출하게되면 컴파일에러가 난다. ( 비주얼스튜디오 컴파일러는 그렇다.) 왜나하면 파생클래스 객체의 기본 클래스 부분이 생성되는 동안은, 그 객체의 타입은 바로 기본클래스라는 점이다. 따라서 호출되는 가상 함수는 모두 기본 클래스의 것으로 결정(resolve)될 뿐만 아니라 런타임 타입 정보를 사용하는 언어 요소(dynamic_cast, typeid)를 사용한다 해도 이 순간엔 모두 기본 클래스 타입의 객체로 취급한다. 소멸자도 마찬가지 같은 의미로 생성자의 일반 함수에서 가상함수를 호출하는 경우도.. 2019. 7. 23.
[Effective C++] 항목 8: 예외가 소멸자를 떠나지 못하도록 붙들어 놓자. 오늘은 두번째 시간! 오늘은 소멸자에서 예외가 발생할 경우를 대비해 예외처리를 잘 해주자에 대해서 이야기한다. 데이터베이스의 연결이 항상 닫히도록 하는 함수를 db.close라고 하자. 그러면 소멸자에 db.close라는 함수를 작성하면 된다. 하지만 db.close에서 오류가 발생할 경우 즉, 연결을 닫다가 오류가 발생하면 문제가 발생한다. 메모리 누수등 여러 문제가 발생할 수 있기 때문에 try catch로 프로그램을 바로 끝내는 코드를 작성하자는 것이다. 하지만 필자는 다음과 같은 코드가 제일 좋다고 한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 class DBconn { public: void close(){ db.close(); closed = tr.. 2019. 7. 22.
[Effective C++] 항목 7: 다형성을 가진 기본클래스에서는 소멸자를 반드시 가상 소멸자로 선언하자. Effective c++의 item을 간단히 정리하려고 한다. 오늘은 상속시키려는 클래스는 소멸자를 반드시 가상 소멸자로 선언해야만 한다는 주제에 대해 알아보기로 하자. 가상 소멸자로 선언해야 하는 이유는 파생 클래스에서 기본클래스의 포인터를 delete로 소멸시킬때 기본클래스만 소멸이 되고 파생클래스는 소멸이 안되어 메모리 누수현상이 발생한다. 따라서 상속시키려는 클래스는 소멸자를 가상함수로 사용해야 한다. 여기서 주의할 점은 가상함수를 C++에서 구현하면 클래스에 프로그램 실행중에 주어진 객체에 대해 어떤 가상함수를 호출해야하는지 결정하는 자료구조 vptr(가상함수 테이블 포인터 : virtual table pointer), vtbl(가상함수 테이블 : virtual table)가 별도로 들어가야 하.. 2019. 7. 18.
[C] strtok 문자열 자르기 먼저 특정 문자를 기준으로 문자열을 자르는 방법입니다. 문자열을 자르는 함수는 strtok 이며 함수 이름은 문자열을 조각(token)으로 나누다(string tokenize)에서 따왔습니다(string.h 헤더 파일에 선언되어 있습니다).strtok(대상문자열, 기준문자);char *strtok(char *_String, char const *_Delimiter);자른 문자열을 반환, 더 이상 자를 문자열이 없으면 NULL을 반환다음 내용을 소스 코드 편집 창에 입력한 뒤 실행해보세요.string_tokenize_array.c#define _CRT_SECURE_NO_WARNINGS // strtok 보안 경고로 인한 컴파일 에러 방지 #include #include // strtok 함수가 선언된 헤더.. 2018. 10. 21.
[C++] STL : Standard Template Library 6 - 해시 맵_Hash Map About STL을 보시는 분은 대부분 아직 STL을 잘 모르는 분들이라고 생각합니다. 제가 일하고 있는 게임업계는 주력 언어가 C++입니다. 그래서 취업 사이트에 올라온 프로그래머 채용 공고를 보면 필수 조건에 거의 대부분이 C++와 STL 사용 가능이 들어가 있습니다. 게임 업계뿐 아니라 C++을 사용하여 프로그래밍하는 곳이라면 대부분 C++과 STL을 사용하여 프로그램을 만들 수 있는 실력을 필요로 합니다. C++ 언어를 배우고 사용하는 프로그래머라면 STL을 배우면 좋고, 특히 게임 프로그래머가 되실 분들은 STL을 꼭 사용할 줄 알아야 됩니다. 작년 여름부터 About STL을 쓰기 시작하여 지금은 2009년이 되었습니다. About STL 집필 계획으로는 이제 반 정도 도달한 것 같습니다. 앞.. 2018. 9. 30.
[C++] STL : Standard Template Library 5 -deque (2) 5.5.3. deque 실습 예제 다음은 deque에서 가장 자주 사용하는 멤버들을 사용하는 전체 코드입니다. [리스트 1]12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514.. 2018. 8. 10.
[C++] 2차원 Vector 예제 간단한 2차원 Vector 예제이다. 코드에 설명을 적어놓았으니 결과와 함께 참고하면 될 것 같다. code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 #include #include #include using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(0); int num; cout num; vector nums; cout 2018. 8. 8.
[C++] STL : Standard Template Library 5 -deque (1) 이번 회는 STL 컨테이너 라이브러리 중 하나인 deque를 설명합니다. 앞 회의 list, vector 글을 보신 분들은 아시겠지만 STL 컨테이너 라이브러리는 사용하는 방법이 서로 비슷하므로 하나만 잘 알면 다른 컨테이너도 쉽게 배울 수 있습니다. 이전에 연재했던 list나 vector에 대한 글을 보지 않은 분은 꼭 보신 후 이 글을 보기를 권합니다. 또 이미 list나 vector를 알고 있는 분들은 deque의 자료구조 및 특징을 잘 파악하기를 바랍니다. 5.1 deque의 자료구조deque의 자료구조는 이름과 같이 Deque(Double Ended Queue) 자료구조입니다. Deque 자료구조는 Queue 자료구조와 비슷하므로 먼저 Queue 자료구조를 설명하겠습니다. Queue는 선형 리스.. 2018. 8. 2.
Microsoft Visual C++ 프로그래밍 자료형 총정리 자료형크기범위비고char signed char1바이트, 8비트-128~127 unsigned char1바이트, 8비트0~255 short short int2바이트, 16비트-32,768~32,767int 생략 가능unsigned short unsigned short int2바이트, 16비트0~65,535int 생략 가능int signed int4바이트, 32비트-2,147,483,648~ 2,147,483,647 unsigned unsigned int4바이트, 32비트0~4,294,967,295int 생략 가능long long int signed long signed long int4바이트, 32비트-2,147,483,648~ 2,147,483,647int 생략 가능unsigned long unsigne.. 2018. 7. 23.
[C++] STL : Standard Template Library 4 -Vector 이번 회는 이전 회에 설명한 list와 같은 STL의 컨테이너 라이브러리인 vector에 대해서 이야기합니다. vector는 STL에서 가장 자주 사용합니다. 프로그래밍을 할 때 가장 자주 사용하는 자료구조는 배열입니다. vector는 배열을 대체하여 사용할 수 있습니다. vector는 배열과 비슷한 면이 많아서 STL 컨테이너 중에서 이해하기가 가장 쉽고 또 어디에 사용해야 하는지 알기 쉽습니다. 앞서 연재한 list에 대한 글을 보신 분들은(또는 아시는 분들은) vector와 사용 방법이 비슷한 점이 많아서 list보다 훨씬 더 빠르게 이해하리라 생각합니다. list에서 이미 언급한 몇몇 부분은 다시 언급하지 않으니 list에 대한 글을 보지 않으신 분은 꼭 보시기 바랍니다. 4.1 vector의 자.. 2018. 7. 11.
[C++] STL : Standard Template Library 3 - 연결 리스트 예제답 Colored By Color Scripter™123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990#include #include using namespace std; //포인터 구조체struct point{ int Xp; // x 좌표 int Yp; // y 좌표 point(int xp, int yp) { Xp = xp; Yp = yp; }}; void main(){ //과제 1) cout 2018. 7. 6.