C++/이것이 C++이다
-
[C++] 람다 표현식C++/이것이 C++이다 2021. 12. 6. 16:49
람다 표현식 (Lambda Expression)은 람다식 (Lambda)으로 자주 불리는 함수 선언 방식입니다. 람다식은 이전 글(함수)에서 살펴본 함수 객체, 함수 포인터와 유사하게 함수를 전달하는 데 주로 사용됩니다. 람다식은 다음과 같은 형태로 구성됩니다. [] () mutable throw() -> int { int a; a++ return a; } [] : Capture clause, Labmda introducer라고 합니다. 람다식 외부 변수에 접근하기 위해 사용합니다. () : Parameter list입니다. 파라미터가 없을 경우 생략 가능합니다. mutable : Capture를 통해 참조, 복사 한 외부 변수의 상수성을 제거하는 데 사용됩니다. 필요한 경우에만 기술하는 속성입니다. t..
-
[C++] 함수C++/이것이 C++이다 2021. 11. 28. 23:45
함수는 이전 글(함수 기본)에서도 다루었던 주제입니다. 지난 글에서는 함수 그 자체의 기능 (디폴트 파라미터, 인라인 등...)에 대해 다루었습니다. 이번 글에서는 함수를 객체지향적으로 다루는 것과 관련이 있는 기능에 대해 살펴보도록 하겠습니다. 1. 함수 포인터 더보기 포인터는 주소를 저장하는 변수 입니다. 그리고, 이 주소에는 함수 또한 포함됩니다. 함수 또한 변수와 마찬가지로 자기만의 주소를 가지고 있습니다. 포인터를 통해, 함수의 주소를 가리키고 사용하는 것이 가능합니다. 예제를 살펴보겠습니다. #include using namespace std; int test_func() { return 12; } int main() { int (*func)() = test_func; cout
-
[C++] 예외 처리C++/이것이 C++이다 2021. 11. 25. 13:06
프로그램의 흐름이 개발자가 의도한 방향대로 흘러가지 않는 경우는 흔한 일입니다. 프로그램이 실행되는 기기의 환경이 다르거나 사용자의 입력이 개발자가 의도한 것과 다르다거나 하는 등의 이유로, 프로그램에는 언제나 예외가 발생할 수 있습니다. 이번 글에서는 예외 상황에 대응하는 방법에 대하여 다룰 것 입니다. 1. try, catch, throw 더보기 C++는 문법적으로 예외상황에 대한 대응책을 제공합니다. try, catch, throw 예약어가 바로 예외 처리에 사용되는 예약어 입니다. 예제를 살펴보겠습니다. #include using namespace std; int main() { try { // Line 5 : Logic execution int a, b; cin >> a >> b; if (b =..
-
[C++] 스마트 포인터C++/이것이 C++이다 2021. 11. 3. 15:16
스마트 포인터는 포인터처럼 동작하는 클래스 템플릿 입니다. 동적 할당 된 변수를 자동으로 해제해주는 스마트 포인터는 메모리 관리에 큰 도움이 되는 기능입니다. 이번 글에서는 스마트 포인터의 4가지 종류에 대하여 살펴 볼 것입니다. 1. auto_ptr 더보기 auto_ptr은 가장 오래 된 스마트 포인터 입니다. 가장 오래된 만큼 개선이 많이 이루어졌을 수도 있겠지만, 아쉽게도 auto_ptr은 그렇지 않습니다. 예제를 살펴보겠습니다. #include using namespace std; class MyClass { public: MyClass() { cout
-
[C++] 템플릿C++/이것이 C++이다 2021. 10. 26. 17:22
템플릿은 모양을 찍어내는 틀과 같습니다. Template 1. [명사] 형판(形板) 2. [명사] 견본, 본보기 C++에서의 템플릿도 위와 유사한 의미로 사용됩니다. 한 코드를 찍어내듯이 가져다 사용하는 템플릿은, C++의 생산성에 많은 기여를 하는 문법입니다. 이번 글에서는 템플릿을 사용하는 방법에 대해 살펴볼 것 입니다. 1. 템플릿 더보기 서론에서 템플릿을 틀에 비유했습니다. 이 틀로 찍어내는 것은 바로 자료형 (클래스) 입니다. 템플릿은 함수, 클래스에 적용할 수 있으며 다음과 같은 문법을 사용합니다. template [Return type] [function name]([Params]) { } template class [Class name] { }; 관련된 예제와 함께 보겠습니다. #inclu..
-
[C++] 객체 간 관계C++/이것이 C++이다 2021. 10. 19. 00:09
C++는 OOP Language 입니다. OOP적 관점에서 C++의 객체는 다른 객체와 특정한 관계가 성립합니다. 이번 글에서는 이하의 내용을 다뤄 볼 것입니다. 객체가 다른 객체와 어떤 관계가 될 수 있는지 객체 간 관계 형성과 관련된 문법이 무엇인지 기초와 관련된 만큼, 많은 내용이 포함되어 있지는 않습니다. 다만, 설계와 관련된 내용이 조금 나오는 관계로 짚고 넘어가면 좋을 것 같습니다. 1. friend 키워드 더보기 friend 키워드는 클래스 내부에서, 함수나 클래스 선언 앞에 사용되는 키워드 입니다. 다음과 같이 사용합니다. friend class [Class Name]; friend [Function Prototype]; 이렇게 선언된 클래스와 함수는 접근 제어 지시자의 영향을 받지 않습니..
-
[C++] 다중 상속C++/이것이 C++이다 2021. 9. 24. 16:45
다중 상속은 한 클래스가 두 개 이상의 클래스를 동시에 상속받는 것을 의미합니다. 잘 사용한다면, 여러 클래스를 섞은 새로운 클래스를 쉽게 만들어 낼 수 있을 것 입니다. 하지만 그렇게 잘 사용하는 것 보다, 잘못될 가능성이 더 큰 기능이 다중 상속 입니다. 초기 개발 단계까지는 쉽고 빠른 길 처럼 보일 수 있지만, 이후에는 구조적 결함이 더 커질 확률이 높습니다. 이번 글에서는 다중 상속이 어떤 것이며, 왜 위험한 것인지를 중점으로 살펴 볼 것입니다. 1. 다중 상속 더보기 서론에 의하면, "그렇게 위험한 것이면 문법적으로 제한하면 되지 않는가?" 라는 질문이 나올 수 있습니다. 실제로 JAVA, C# 등의 다른 객체 지향적 프로그래밍 언어는 다중 상속을 문법적으로 제한하고 있기 때문입니다. 하지만 C..
-
[C++] 형 변환 연산자C++/이것이 C++이다 2021. 9. 19. 21:21
지난 글에서는 가상 함수에 관해 살펴보았습니다. C++과 객체 지향이라는 두 키워드를 같이 놓고 본다면, 가상 함수는 가장 중요한 내용 중 하나일 것 입니다. 그런 가상 함수의 무게를 줄이지 않기 위해 이번 글과 분리 해 놓았습니다. 이번 글에서는 C++에서 제공하는 형 변환 연산자에 대해 살펴 볼 것입니다. 1. 개요 더보기 형 변환 연산자는 이전 글(깊은 복사와 얕은 복사)에서 잠시 언급되었습니다. 다시 짚어보자면, C++의 형 변환 연산자는 4 종류가 존재합니다. const_cast static_cast dynamic_cast reinterpret_cast C언어의 강제 형 변환 연산자의 위험성과 불안정성을 해결하기 위해 C++에서 새로 정의된 4가지 형 변환 연산자입니다. 다음 문단에서 위 연산자..