C++(따라하며 배우는 C++)

C++(따라하며 배우는 C++)

Chapter 14-(2). 예외 처리

스택이 쌓이는 과정을 생각하면 이해 하기 쉽다. 결과값 보면서 이해하면 됨. 핵심은, 스택에 쌓인 것을 되돌아간다는 것. ... 은 전에 eclipse, 전체 해당 하는 케이스다.

C++(따라하며 배우는 C++)

chapter 14 - 1. 예외처리의 기본

본 포스팅은 인프런사이트(www.inflearn.com)의 "홍정모의 따라하며 배우는 C++" 유로강의를 자비로 구매해 복습하기 위한 용도로 올리는 포스트입니다. 해당 코드나 사진의 모든 저작권은 강의 제작자인 홍정모 교수님에게 있습니다. 흔히 우리가 오류인 상황? 예외인 상황을 return -1로 표현을 한다거나, Flag 역할을 하는 bool 타입의 변수를 하나 선언해서 인자로 전달하는 경우를 많이 사용하게 된다. 정통적인 C++ 스타일의 코드이며, 실제로 많이 사용되는 코드이다. 예외 처리가 주로 사용되는 경우는 '예측할 수 없는 일이 많이 벌어지는 경우' 이다. 네트워크 환경이라던가, 게임을 사용하는 유저가 갑작스런 돌발행동이 일어난다거나 등 우리가 예측하기 힘든 경우를 예외처리하고, 작업을 지속..

C++(따라하며 배우는 C++)

Chapter 13-(4). 템플릿 (포인터, 멤버 함수 한번 더 템플릿)

이번 주제는 간단하다. 지금까지의 포스트들을 잘 이해했다면, 쉬움. 현재 클래스에서 print()함수 구현이 m_value로만 되어있어서, template의 자료형이 포인터인 경우 주소값이 나온다. 우린 포인터에서는 좀 특수화 해주고 싶다면? 기존에 하던 것 처럼 특수화를 해주면 된다. 이건 쉬워서 패스... template T를 적용한 A라는 클래스의 멤버함수인 doSomething()에 template TT를 또 적용시킨 경우다. 이 template는 doSomething()함수에만 적용되는 범위를 가진다. 템플릿을 헷갈리지 말아야할 부분?이라면 T를 명시해줄 때, 로 명시해줘야하는지, 아니면 단순히 그냥 인자로 명시가 되기 때문에 굳이 로 명시를 안해도 되는지는 충분히 고민해봐야함.

C++(따라하며 배우는 C++)

Chapter 13 -(3). 템플릿을 부분적으로 특수화

생각보다 쉬우면서 까다로우니, 정리를 잘 해보자. 뭐 평범하다. 여기서 출력할 때, 문자열이 print()함수의

C++(따라하며 배우는 C++)

Chapter 13-(2). 템플릿 Template (template<> specialization)

기존의 템플릿 인자를 우리는 이렇게 하나만 사용했다. 하지만 두 개라면 어떨까? 배열의 예시를 보자면, 현재 T_SIZE를 컴파일 이전에 기입했기에, 이를 코드로 구현했다. 전의 13-(1) 템플릿 포스트를 보면, 헤더 파일의 print() 내용들을 다른 cpp에 옮겨넣었다. 그 때 명시를 해줘야한다했다. 하지만 지금의 사례는? 명시하기가 힘들다. 라 할 때, a에 들어갈 수가 무한정이기 때문에 일일이 해주기가 힘들다. 그래서 이럴 땐 그냥 맘 편하게 cpp로 따로 분리하기 보다는 그냥 헤더파일에 넣는다. template은 모든 경우에 적용되게 설정했다. 그런데, 예를 들어 T가 char인 경우는 따로 작동하게 하고 싶어요! 라면 어떻게 해야할까? 특별한 경우를 조건으로 걸어줘야겠지. 이 경우를 spec..

C++(따라하며 배우는 C++)

Chapter 13 - (1). 템플릿 Template

함수의 형태는 동일한데, 자료형이 계속 달라서 저렇게 함수들을 일일이 만드는 것은 노가다에 불과하다... 모든 자료형에 적용되는 것이 없을까? 해서 나온게 Template 이다. template으로 주로쓴다. template을 써도 같은 동작을 한다. 클래스의 객체를 활용하려면, 연산자를 오버로딩해줘야한다. _____________________________________________________________________________________________________________________________ 현재 m_data 동적배열에 아무 자료형을 넣기 위해 T로 해주었다. operator [] 의 경우 return type 역시 아무자료형이 나와야하므로 T로 해줬다. 이 경우, ..

C++(따라하며 배우는 C++)

Chapter 12(가상 함수들) 끝.

reference로 받아들였으니, 정상적으로 derived의 객체로 출력되고 있다. 하지만 ref가 아닌, 그냥 value로 받아버리면, 값을 복사하는 것이기 때문에 Base가 Derived 보다 크기가 작으므로 Derived의 차집합 부분이 짤림이 발생한다. 그렇기에, 오버라이딩이 되지 않은 채 Base가 출력되버린다. doSomething 함수를 보면 얘도 인자로 엄연히 reference로 받고 있기 때문에, Derived에 맞게 출력된다. 하지만 value로 받게 되면? 아까처럼 Base로 출력된다. 이건 유의점인데, vector를 활용할 경우 vector에선 &, 즉 reference를 활용할 수 없다. 그렇기에 단순히 vector로 할 경우 아까처럼 value로 처리되기 때문에 잘림현상이 발생한..

C++(따라하며 배우는 C++)

Chapter 12-7, 8. 순수 가상 함수, 추상 기본 클래스, 인터페이스 클래스, 다이아상속문제

부모 클래스에 가상 함수를 body가 없는 상태로 선언만 해놓은 형태를 pure virtual function이라 한다. pure virtual function이 단 하나라도 있으면, 추상 클래스가 되기 때문에, 당연히 객체를 생성할 수 없다. 이럴 경우, 의미 자체가 자식 클래스들에서 해당 함수를 구현한다는 의미. 자식 클래스에서 해당 virtual 함수를 구현하지 않았기에, 자식 클래스의 객체를 만들 수 없다. 자식 클래스에서 해당 함수를 구현하니, 정상적으로 작동. pure virtual function을 선언하는 이유는 간단하다. 자식들이 해당함수를 구현해 각자에 맞게 사용할 수 있게 하기 위함. 이러한 pure virtual function들로만 이루어진 부모 클래스를 '인터페이스 클래스'라 부..

void_melody
'C++(따라하며 배우는 C++)' 카테고리의 글 목록