본문 바로가기

프로그래밍/C++

(16)
[C++] C의 구조체와는 클라스가 다르다, 클래스(Class) - 3 들어가며 전 포스트까지는 C++의 구조체 클래스의 일종이었다. 이제부터는 진짜 클래스를 배울 수 있다. 드디어! 와! 구조체와 클래스의 차이점, 단 하나! 키워드 『struct』대신 『class』를 사용하면, 구조체가 아닌 클래스가 선언된다. 즉, 다음의 코드는 클래스의 정의라고 할 수 있다. class Weapon { char weaponID[WEAPON_CONST::ID_len]; // 무기 아이디 int dura; // 내구도 int dura_dbf; // 내구도 디버프 조건 int atk_dmg; // 공격력 void WEAPON::ShowWeaponState() { · · · · · } void WEAPON::Attack() { · · · · · } void WEAPON::Repair() { ·..
[C++] C의 구조체와는 클라스가 다르다, 클래스(Class) - 2 들어가며 오늘도 클래스를 제대로 배울 수 있는지 클래스를 배우고 있는지는 아무도 모른다. 아무튼 일단 들이받고 보는 거다. 하나 정확한 것은, 클래스로 나아가고 있다는 점. 절대 클래스를 배움에 있어서 빗나가고 있지는 않다. 아무튼 시작하겠다. 구조체 안에 enum 상수의 선언 전에 필자가 보여준 코드에는 다음과 같은 매크로 상수들이 있다. #define ID_len 30 // 아이템 이름(ID) #define MAX_DURABILITY 250 // 내구도 최대치 #define DURABILITY_DEBUFF 50 // 내구도 디버프 #define DURABILITY_STEP 2 // 내구도 감소 수치 그런데 이들 상수 역시 구조체 『WEAPON』에게만 의미가 있는 상수들이다. 즉, 다른 영역에서 사용하..
[C++] C의 구조체와는 클라스가 다르다, 클래스(Class) - 1 들어가며 클래스에 대해서 배우기 전에, 구조체에 대해서 알고 있음을 전제로 글을 진행해 나가기 때문에 구조체에 대한 이해가 부족하다면 이 블로그의 구조체에 관한 글을 먼저 읽고 오길 바란다. C++에서의 구조체 본격적인 C++의 클래스를 배우기 전에 간단하게 알고 가자. C에서 '구조체 변수'를 선언하는 방법은 다음과 같다. struct weapon sword; struct potion potion_red; C++에서는 기본 자료형 변수의 선언 방식이나 구조체를 기반으로 정의된 자료형의 변수 선언 방식에 차이가 없다. 즉, C++에서는 별도의 typedef 선언 없이도 다음과 같이 변수를 선언할 수 있다. weapon sword; potion potion_red; 아무튼 이와 관련하여 구조체를 기반으로 ..
[C++] new와 delete의 동적 할당 들어가며 이 시국이 계속 지속되는 한······. 당신의 새내기 생활 및 1학기 전부, 사이버 강의로 대체되었다. 아마 본인은 대학으로 상경하지 못한 체 현재 주거지에서 죽치고 있을 미래가 보인다. 이러고자 공부해서 대학 갔나 자괴감이 들고 괴롭다. C언어를 공부하면서 malloc 함수와 free 함수의 필요성을 이해하는 것은 하나의 고비가 될 수 있다. 그러나 필자는 독자들이 힙 영역의 특성을 이해하고, 힙 메모리 할당 및 소멸에 필요한 함수가 malloc과 free 임을 알고 있다는 전제를 가지고 이번 글을 시작하도록 하겠다. new & delete 우리가 기존에 듣도 보도 못 한, 그런 키워드를 배워볼 차례다. 일단 이해하기에 앞서, C의 동적 할당에는 2가지 불편한 점이 있다 그런데 C++에서 제..
[C++] 이명제조기, 참조자 - 5 (with. 함수) 들어가며 필자는 20대 초반이며 이제 막 대학에 입학하는 입장인지라, 대학 생활이나 OT, MT 등등 기대하고 있었는데 MT는 커녕 empty에 가까운 것 같다. 진짜 나한테 왜 그래 어흐흑. const 참조자의 뇌절 전 글에서 const 참조자에 대해 이야기한 바가 있다. 이와 관련하여 추가적으로 보충할 내용이 남아있다. 그럼 어쨌거나 저쨌거나 다음 코드를 보고 논리적으로 무엇이 잘못 되었는지 확인하라. const int num = 20; int& ref = num; ref += 10; cout
[C++] 이명제조기, 참조자 - 4 (with. 함수) 들어가며 시작하기에 앞서 드디어 본인이 현재 서식하고 있는 지역에서도 코로나 바이러스 확진자가 나왔다. 발이나 손은 반드시 외출 후 세척해야 한다. 신천지 신도라고 환자가 말해주었기에 천만다행으로 빠르게 역학조사가 실시 되었다. 지금 할 수 있는 최선의 방법은 외출을 자제하는 것이지 않을까. 참조형 반환(진) - 중 전 글의 끝 무렵에 코드를 주고 해석을 하고 의미를 찾아오라고 하였다. 우선 그 코드는 다음과 같다. #include using namespace std; int& RefRetFuncOne(int& ref) { ref++; return ref; } int main() { int num1 = 1; int num2 = RefRetFuncOne(num1); num1+=1; num2+=10; cout
[C++] 이명제조기, 참조자 - 3 (with. 함수) 들어가며 1720년에는 마르세이유 역병이 창궐했다. 1820년에는 콜레라, 1920년에는 림프절 페스트, 그리고 2020년에는 코로나 바이러스. 이쯤 되면 지구가 친환경을 직접 실천하는 것이 아닐까 싶다. 100년 주기로 이렇게 기승인 것을 보면, 역병 스킬 쿨타임이 꽤나 긴 것 같다. 진짜 Call-By-Reference 전 글에서 말했듯이 이번엔 진짜 'Call-By-Reference' 방식을 학습할 것이다. 이름에 맞게 참조자를 사용한 함수 호출 방식 말이다. 전에도 말했다시피 핵심은 '함수 외부에 선언된 변수에 접근' 이지 않은가? 일단 빠르게 코드와 부딪쳐보자. int SwapByRef(int& ref1, int& ref2) { int temp = ref1; ref1 = ref2; ref2 = ..
[C++] Call-By- ······ 그게 뭔데 들어가며 원래는 본격적으로 참조자의 활용에 대해 학습할 시간이지만, 오늘 배울 이 개념을 확실하게 잡고 가지 않으면 안된다. '또,또,또,또,또, 지만 아는 거 나왔다고 신났죠?' 누누히 말하지만 이 블로그가 누구한테 보여지는 것을 상정하고 본 필자가 글을 쓰는 것은 아니기 때문에 혼자 공부하는 느낌으로 운영하는 블로그다. 실제로는 꽤 보는 사람이 있는 거 같지만, 어찌 되었던 간에 내 일기장을 누가 보는 느낌이라고 생각하면 편하다. 각설하고, 사실 참조자의 활용에는 함수가 큰 지분을 차지하고 있기 때문인데, 따라서 오늘은 함수의 호출 방식에 관한 것을 학습해볼까 한다. 함수 호출의 두 가지 방식 'Call-By-Value & Call-By-Reference' 어디서 분명 많이 들어본 구절이다. 포인터를..
[C++] 이명제조기, 참조자 - 2 들어가며 자 이번 시간을 끝으로 개념적인 참조자의 설명은 끝이 난다. 그 말은 즉, 아직 참조자에 대해 알아야 할 것들이 많이 남아 있다는 소리다. 지금까지 설명한 것만 가지고 참조자를 어디다가 실용적이게 잘 써먹어 봐라! 라고 한다면 너무 무책임 한 것이 아닌가. 그렇기에 우린 좀 더 참조자에 대해서 알아볼 필요가 있다. 분명 어딘가에 써먹지 않겠는가? 참조자의 개수의 제한 결론부터 말하자면, 그런 거 없다. 즉, 다음과 같이 여러 개의 참조자를 선언하는 것도 가능하다. int num1 = 1; int& num2 = num1; int& num3 = num1; 이렇게 된다면 num1의 메모리 공간에 num2와 num3라는 이명이 붙은 것이 되고, num2와 num3를 이용하여 num1의 메모리 공간에 접..
[C++] 이명제조기, 참조자 - 1 들어가기 전에 반갑다. 여러분들은 프로그래머의 길을 걷고 있지 않은가? 컴퓨터를 다루는 모든 IT관련 직종의 필수 기본 소양 패시브가 있다. Passive - 항시 저장 본인은 이 글을 한 번 날린 전적이 있다. 아 들어가며 참조자(Reference). 프로그래밍을 공부하려는 사람이면 어디선가 많이 들어본 키워드다. 이름만 들어서는 어디다 써먹을지, 무슨 개념인지 감이 잘 오지 않는다. 오늘은 이 녀석이 뭐하는 놈인지를 함께 알아보는 시간을 갖도록 하겠다. 오늘 공부할 '참조자'라는 녀석은 성격상 '포인터'와 비교되기 쉬운데, 참조자는 포인터를 모르더라도 이해할 수 있는 개념이다. 따라서 굳이 포인터의 개념을 끌어와다가 이해하겠답시고 자신을 괴롭히지 않았으면 한다. 그런데 사실은 참조자도 내부적으로는 포..
[C++] 자료형계의 이단심문관, bool 들어가며 오늘은 모순에 관하여 얘기할까 싶다. 마침 bool형 자료형도 참과 거짓을 구분하는 자료형으로 주제와도 어느 정도 공통점을 가진다. 모순, 어딜 봐도 딱히 좋은 이미지의 단어는 아니다. 사람에게 적용해보면? 딱 혼자 다니기 좋아 보이는 성격이지 않은가? 우린 솔직해 질 필요가 있다. 우리가 살아가면서 인생에 단 한 번도 모순적인 태도를 보인 적이 없을까? 우리 모두는 모순적인 사람이다. 하지만 우린 한 가지 관점에서만 바라보기에 부정적인 프레임에 갇혀있는 것이다. 우린 게으른 프로그래머가 되기 위해 성실히 공부한다. 게으르기 위해 성실해진다. 완벽한 모순이다. 마치 0과 1의 상태가 중첩된 양자컴퓨터의 CPU의 단자 한 구석처럼 우리 인간은 그런 양자적 상태에 자주 놓이게 된다. 우린 솔직해질 ..
[C++] 이름 공간(Name space) - 2 들어가며 오랜만이다. 꽤 며칠동안 글 써야지 써야지 각만 재다가 각만 쟀다. 사실 병원이다, 졸업식이다, 설이다, 요다, 소다, 뭐다 아무튼 마냥 놀기만 한 것은 아니었다. 나름 따로 시스템 기획 공부도 찬찬히 하고 있었으니 나름의 합리화를 해본다. 아무튼 오늘의 주제 '이름공간'에 관하여 공부해 보겠다. 솔직히 이제 20살인데 좀 놀아야지. 안 놀면 청춘 낭비지. 이름 공간의 중첩 이름 공간의 마지막 특성인 '중첩'이다. 이름 공간은 다른 이름 공간 내부에 삽입 될 수 있다. 즉, 다음과 같은 형태로 중첩이 가능하다. namespace Brain { int Lv = 1; namespace Dopamine { int Lv = 2; } namespace Serotonin { int Lv = 3; } nam..