상속(Inheritance), 접근 제한자 https://modoocode.com/209 본 포스팅은 위 링크의 글을 참조하여 작성하였습니다. 참고로 해당 글은 상속에 대해서 자세히 설명하기 보다는 C++문법에 집중할 것이다. 1. 상속 출처 : https://www.programiz.com/cpp-programming/inheritance 상속에 대한 대표적인 예제는 동물에 대한 예제가 있다. 가령 동물에 개, 고양이 군이 있고, 개군에는 포메, 진돗개 등이 있다. 이렇게 세부적으로 나눠진 포메, 진돗개는 개의 특성을 가지고 있으며, 동물의 특성 또한 가지고 있다. 그래서 이들은 동물과 개의 특성을 상속받는다. 가령, 개의 생김새, 짖는 방식등이 포메와 진돗개같은 세부 군에 상속되는 것이다. 또한, 동..
연산자 오버로딩 2편, friend, 입출력 연산자 오버로딩, 타입 변환 연산자 1. friend friend 키워드는 클래스 내부에서 다른 클래스나 함수들을 friend```로 정의할 수 있다. friend로 지정된 클래스나 함수들은 해당 클래스의 변수나 함수에 접근할 수 있는데, 심지어 private 접근 제한을 받는 변수나 함수들도 접근 가능하다. 그래서 어디에 friend 키워드를 써줘야 하나 싶을텐데, 나와 친구라고 생각하는 애가 friend 키워드를 쓴다. 즉, A가 B에게 친구라고 생각하면 A가 내부적으로 B에 대한 friend 키워드를 가진다. 친구라고 생각하는 녀석이 접근하는게 아니라, 언제나 사기당하는 사람들은 친구라고 생각하여 다 알려준다. 따라서, 사기꾼 입장에서 친구의 비밀(pri..
연산자 오버로딩1, 대입 연산자, 산술 연산자, 비교 연산자 https://modoocode.com/202 연산자 오버로딩은 기존에 있는 연산자들(+, - , % , / , >= , == , += , -=, ++, -- , [] 등등)을 오버로딩하여 구현하는 것으로 해당 연산자에 자신이 원하는 로직을 구현할 수 있다. 주의할 것이 연산자 오버로딩이다. 오버라이딩이 아니다. 이를 알아두면 좋은 이유는 만약 기존의 코드에서 비교 연산자나 +, - 연산자 등이 사용되었다면, 굳이 내가 만든 함수로 바꾸지 않고 타입만 바꿈으로서 기존 코드를 고치치 않고 코드 변경이 가능하기 때문이다. 일반적으로 연산자 오버로딩을 사용하기 위해서는 다음과 같은 연산자 함수를 만들면 된다. (리턴 타입) operator(연산자)(..
explicit , mutable https://modoocode.com/253 본 포스팅은 위 링크의 글을 바탕으로 작성하였습니다. 1. explicit (명시적) explicit은 c++에서 암시적 변환을 할 수 없도록 컴파일러에게 명시하는 것이다. 즉 implicit conversion(암시적 변환)이 안되도록 하는 것인데, 이는 개발자의 의도대로 코드가 흐르도록 만들기 위함이다. 그럼, implicit conversion은 무엇일까?? 다음의 예제를 살펴보자 #include #include using namespace std; class People{ private: char* name; int nameLen; public: People(int _nameLen); People(const char*..
https://modoocode.com/197 본 포스팅은 위 링크의 글을 참조하여 정리한 글입니다. 1. 생성자의 초기화 리스트 (initializer list) 우리는 이전에 생성자의 초기화 리스트 문법을 보았다. 바로 이 녀석인데 #include using namespace std; class Rectangle{ private: int x; int y; int width; int height; public: Rectangle(int _x, int _y); Rectangle(int _x, int _y ,int _width, int _height); void print_rectangle(); }; Rectangle::Rectangle(int _x, int _y) : x(_x), y(_y) , width..
소멸자와 복사 생성자, RAII 패턴 https://modoocode.com/188 본 글은 위 글을 정리한 내용입니다. 1. 소멸자 우리는 new 동적 할당을 통해 힙영역에 메모리를 할당할 수 있다는 것을 알고 있다. 그리고 해제할 때는 delete연산자를 통해 해제할 수 있다고 했다. 이는 클래스 역시 마찬가지인데, 다음의 경우를 확인해보자 #include #include using namespace std; class People{ private: int age; public: People(int _age); ~People(); void print_info(); }; People::People(int _age){ age = _age; } People::~People(){ cout
new, delete, class https://modoocode.com/169 본 글은 위 글을 정리한 내용입니다. c++과 c언어의 가장 큰 차이가 무엇인가? 라고 한다면 바로 class의 유무이다. c언어로 객체지향 프로그래밍을 하기에는 어렵다. 물론 할 수는 있지만 여러가지 제약이 많고 우리가 아는 모습도 아니다. 반면 c++은 객체지향 프로그래밍이 가능하기 때문에 더욱 유연하고 다양한 프로그래밍 기법이 가능하다. 물론 그렇다고해서 c++이 c보다 꼭 더 좋다고 말하는 것은 아니다. fancy한 문법은 언제나 사용자에 따라 그 퀄리티와 복잡도가 달라지기 때문이다. 1. new/delete c언어에서 힙(heap) 메모리 영역에 변수를 할당, 해제할 수 있는 함수는 malloc, free였다. c+..
참조자 1. C언어에서의 swap https://modoocode.com/141 본 글은 위 글을 정리일 뿐이다. C언어에서는 함수에서 매개변수로 넘어온 변수의 값을 바꾸기 위해서는 pointer를 사용해야만 했다. 그러나, 이는 코드에 asterisk(*)가 너무 많아지고, 어디서 어떻게 변했는 지 알기 어렵게 했다는 단점이 있다. 이를 보완하여 c++에서는 참조자가 나왔는데, pointer 처럼 값을 바꿀 수는 있지만 asterisk는 사용하지 않는 특이한 문법이다. #include using namespace std; void swap(int *first, int *second){ int temp = *first; *first = *second; *second = temp; } int main(){..