C++/이것이 C++이다
-
[C++] 가상 함수C++/이것이 C++이다 2021. 9. 5. 15:38
가상 함수는 상속과 더불어 객체지향적 설계의 핵심적인 역할을 담당하는 문법입니다. 관점을 다르게 하면, 가상 함수를 사용해야 해결되는 문제도 있을 만큼 매우 중요한 문법입니다. 이번 글에서는, 가상 함수에 대해 다룹니다. 1. 개요 더보기 가상 함수 (Virtual Function)는 virtual 예약어를 붙인 메소드를 의미합니다. 가상 함수는 다음과 같이 선언됩니다. virtual [return type] [function] 예제를 통해 가상함수가 일반 함수와 어떻게 다른지 살펴보도록 하겠습니다. #include using namespace std; class MyClassAnc { public: virtual void print_virtual() { cout
-
[C++] 상속 기본C++/이것이 C++이다 2021. 8. 13. 14:18
상속이란 다음과 같이 정의됩니다. 상속 [명사]1. 뒤를 이음. 2. 일정한 친족 관계가 있는 사람 사이에서, 한 사람이 사망한 후에 다른 사람에게 재산에 대한 권리와 의무의 일체를 이어 주거나, 다른 사람이 사망한 사람으로부터 그 권리와 의무의 일체를 이어받는 일. 출처 : 표준국어대사전 객체지향 프로그래밍에서의 상속 또한 우리가 익히 알고 있는 상속과 의미가 일치합니다. 상위 객체의 뒤를 이어, 그 객체를 계승하고, 발전된 형태의 객체를 만드는 것을 상속이라 합니다. 얕게 보면 코드 재사용성을 문법 레벨에서 지원하는 것이 될 수 있으며 깊게 보면 객체지향적 설계에서, 객체 간 관계규정에 도움을 주는 요소로 볼 수 있겠습니다. 이번 글에서는, 이러한 상속의 기본적인 사용법에 대해 살펴 볼 것입니다. 1..
-
[C++] 연산자C++/이것이 C++이다 2021. 7. 16. 16:15
연산자는 우리가 잘 알고 있는 산술연산자 (+, -, ×, ÷) 논리연산자 (AND, OR... etc)를 의미합니다. 그리고 C++ 에서는 이러한 연산자를 함수 형태로 쓸 수 있는 연산자 함수를 제공합니다. 연산자 함수를 통해 함수를 오버로딩 하듯 연산자 오버로딩이 가능해지고 이것은 객체를 정의함에 있어서 고도의 일반화, 추상화로 이어집니다. 이번 글에서는 연산자 함수와 연산자 오버로딩에 대해 살펴 볼 것입니다. 1. 연산자 함수 더보기 연산자 함수는 말 그대로, 연산자를 사용하듯 호출하는 메소드를 의미합니다. 이전 글(깊은 복사와 얕은 복사)에서 살펴본 대입 연산자 또한 이에 속합니다. 클래스에 적용이 가능한 연산자 함수를 정의한다면 사용자는 더욱 편하게 클래스를 이용할 수 있습니다. 이것은 코드의 ..
-
[C++] 깊은 복사와 얕은 복사C++/이것이 C++이다 2021. 3. 30. 03:43
깊은 복사(Deep copy), 얕은 복사(Shallow copy)에 대한 개념은 값에 의한 호출(Call by value)와 참조에 의한 호출(Call by reference)와 깊은 관련이 있습니다. 대표적으로 전달받은 두 파라미터의 값을 바꾸는 Swap함수를 구현하는 예시가 있습니다. 본문에서는 해당 내용에 대한 기초적인 개념 즉, 볼드체 처리 된 네 용어에 대해 간략히 살펴본 후 그것이 객체지향적 관점에서 어떤 맹점이 되어 다가오는지 그리고 그것을 어떻게 다루어야 하는지 살펴 볼 예정입니다. 1. Swap함수 더보기 바로 예제부터 살펴보도록 하겠습니다. Example (깊은 복사, 값에 의한 호출) #include using namespace std; void deep_swap(int a, int..
-
[C++] 클래스 기본 문법 2C++/이것이 C++이다 2021. 3. 12. 04:48
이전 글에서는 클래스의 구성 요소에 대해 간단하게 살펴보았습니다. 이번 글도 이전 글에서 이어지는 내용입니다.... 만 기본 문법이라기엔, 몰라도 클래스를 정의하는데 문제는 생기지 않습니다. 다만, 객체지향의 관점에서 살펴볼 때 이슈가 될 수 있는 부분이 되지 않을까 합니다. 1. 상수형 메소드 (Const method) 더보기 상수형 메소드는 멤버 변수에 대해 읽기는 가능하지만 쓰기는 제한된 메소드를 의미합니다. 사용은 메소드 뒤에 'const' 예약어를 붙이는 것으로 사용할 수 있습니다. Example (Const method) #include #include class MyClass { public: int my_number; MyClass(int num) :my_number(num) { std::..
-
[C++] 클래스 기본 문법 1C++/이것이 C++이다 2021. 2. 27. 01:55
이전 글에서 클래스가 어떤 아이디어에서 도입되었는지 살펴보았습니다. 객체지향 이라는 개념이 도입된 원인은 여러가지가 있겠지만 이전 글에서 집중했던 내용은 크게 두가지 입니다. - 개발자와 사용자의 분리 - 소스코드의 유지보수성 위의 두 내용과 본문의 내용에 대한 관련성이 잘 보이지 않을 수 있습니다. 자세한 내용은 이후에 다룰 객체지향의 패러다임에서 다룰 수 있도록 하겠습니다. 이번 글은 클래스를 사용하는데 필요한 기본 문법에 대한 내용입니다. 1. 클래스 구성요소 더보기 클래스는 다음과 같은 요소로 구성됩니다. class [Class Name] { [Access Modifier]: [Member Variable]; [Member Function]; } [Class Name] : 클래스의 이름 [Acce..
-
[C++] 클래스를 살펴보기 전에C++/이것이 C++이다 2021. 2. 27. 01:36
C++이 C와 다른 것은 여러가지가 있지만 소소한 문법적인 요소를 제외하고 거시적으로 살펴본다면 '객체지향' 이라는 요소가 가장 두드러질 것 입니다. 본 글에서는 C++의 객체지향 구현 요소인 클래스를 살펴보기 전에 어떤 아이디어에서 객체지향이 등장했는지 단편적으로 살펴보도록 하겠습니다. 1. 구조체 더보기 예제를 먼저 보도록 하겠습니다. 이하 예제는 이름과 나이를 유저 데이터로 묶기 위해 구조체를 사용 한 예제입니다. Example (Struct) #include typedef struct User { int age; char name[24]; }User; int main() { User user = { 10, "Lee" }; printf("Age : %d\nName : %s\n", user.age, ..
-
[C++] 네임스페이스C++/이것이 C++이다 2021. 2. 12. 00:05
네임스페이스란 C++의 각종 요소 (클래스, 함수, 변수)를 일정 [구역]으로 묶어주는 문법입니다. 네임스페이스를 이용하게 되면 자칫 중복될 수 있는 클래스, 함수, 변수의 이름들을 소속 네임스페이스라는 한단계 더 높은 그룹화가 가능해지므로 규모의 프로젝트에서의 협업이 한층 더 용이해질 수 있습니다. 1. 네임스페이스 더보기 네임스페이스란 클래스, 함수, 변수에 소속을 지정해주는 문법입니다. #include namespace Sample{ int sample_data = 10; void function(){ std::cout