본문 바로가기

728x90
728x90

Language/C++

[C++] 복사 생성자, 연산자 오버로딩(Copy Constructor, Operator Overloading)- 컴도리돌이 outline copy constructor friend, static Operator overloading 복사 생성자(Copy constructor) 같은 클래스의 다른 객체를 사용하여 또 다른 새로운 객체에 복사하여 생성한다. 복사 생성자(copy constructor)는 값을 가진 객체(object)를 반환할 때 사용되는데, 이때 또 다른 값을 가진 객체(object)를 변수(argument)를 받아서 copy를 해준다. ClassName(const ClassName& old_obj); class Point{ public: double x, y; // ... }; Point GetScaledPoint(double scale, Point p) { Point p_new; p_new.x = p.x*sc.. 더보기
[C++] 템플릿(Template) - 컴도리돌이 outline intro to Generic Programming Function Template Class Template STL templates and inheritance 일반화 프로그래밍(generic Programming) 일반화 프로그래밍은 알고리즘에서 매개변수로 제공되는 특정 유형(specific types)에 대해 필요할 때 인스턴스화(instantiated)하는 to-be-specified-later의 관점에서 작성된다. C++에서 template는 서로 다른 타입으로 인해 반복적으로 작성해야 하는 코드를 피하기 위해 사용된다. 즉, 타입에 대해 일반화 접근(Generic Approach)을 한다. 함수(functions)와 클래스(class)에서 template를 사용할 수 있다. t.. 더보기
[C++] 다형성(Polymorphism)-(1) - 컴도리돌이 outline Pointer, References and Inheritance Virtual Function Virtual Destructor Caution : Object Slicing C++에서 다형성(Polymorphism in C++) 같은 함수 호출에 대해 서로 다른 방법으로 응답을 하는 것을 객체지향에서 다형성이라 한다. 포인트, 주소 그리고 상속(Pointers, References and Inheritance) C++에서 다형성을 사용하기 전에, 상속에서 포인터와 주소 연산이 어떻게 사용되는지 이해가 필요하다. #include using namespace std; class Person { public: void Talk() { cout Talk(); student_st->Study(); .. 더보기
[C++] 상속(Inheritance) - 컴도리돌이 Outline Inheritance Overriding Constructor, Destructor & Inheritance Multiple Inheritance const & Class 상속(Inheritance) 부모 클래스(parent class)를 자식 클래스(child class)에 상속을 시키면 부모 클래스(parent class)의 private 값을 제외한 함수, 변수는 자식 클래스(child class)에서 사용이 가능하다. 상속받을 클래스의 이름 옆에 :와 접근 제한자, 그리고 상속할 클래스의 이름을 붙여주면 된다. 상속 : Is-a 관계( Inheritance : Is-a Relationship) "A가 B이다.(A is a B)"라는 관계가 형성될 때 상속을 사용할 수 있다. 예를 들.. 더보기
[C++] 이중 연결 리스트 (Double Linked List) - 컴도리돌이 template class Node { public: Node() {} Node(T value) : value(value) {} Node(T value, Node* next, Node* prev) : value(value), next(next), prev(prev) {} T value; Node* next; Node* prev; }; #include #include #include "double_linked_node.h" template class List { public: List() : count(0) { head = new Node(0, nullptr, nullptr); tail = new Node(0, nullptr, nullptr); head->next = tail; tail->prev = he.. 더보기
[C++] 연결리스트 (list.h , node.h , CMakeLists.txt)-컴도리돌이 우리는 간단한 linked list data 구조를 만들 것이다. 링크된 목록은 연결된 형태의 노드를 말하며, 각 노드가 다음 노드를 가리킨다. List 클래스는 head라고 불리는 특별한 노드를 가지고 있다. 다음 헤드 노드는 목록의 첫 번째 요소를 가리킨다. 목록의 첫 번째 요소 중 다음 요소는 목록의 두 번째 요소를 가리키며, 이러한 방식으로 nullptr(0x0)이 나타날 때까지 목록을 반복하여 반복적으로 반복할 수 있다. #include #include #include "node.h" template class List { public: List() : count(0) { head = new Node(0, nullptr); } ~List() { // TODO: write your code her.. 더보기
[C++] Dynamic array (std::vector) - 컴도리돌이 STL에는 동적 배열용 std::vector가 있다. std::vector를 사용하면 배열을 사용한 것처럼 크기와 랜덤 액세스에 관계없이 요소를 삽입하거나 삭제할 수 있다. 이러한 std::vector와 같은 동적 배열을 생성하려면 메모리를 할당하고 요소 추가로 인해 메모리 크기가 충분하지 않을 경우 재할당해야 한다. *len , push_back 및 pop_back 구현* #include using namespace std; template struct dynamic_array { T* pointer = nullptr; size_t cap = 0; public: dynamic_array(size_t cap) : cap(cap) { this->pointer = new T[cap]; } int array_.. 더보기
[C++] Reference(&) - 컴도리돌이 Reference(&) Reference는 Pointers와 매우 유사하게 사용된다. 포인터보다는 강력하지는 않지만 사용하는 데는 안전하다. Passing by Reference to Constant -> function call 후에도 instance가 변경되지 않고 남기기 위해 사용 -> argument의 copying을 피하기 위해 사용 -> 유효한 instance의 reference가 보장하기 위해 사용 Defferences between Pointer & Reference 1. 포인터는 초기화를 하지 않아도(uninitialized) 사용할 수 있지만, reference는 초기화를 시켜주지 않으면 error가 나기 때문에 반드시 초기화를 시켜줘야 한다(initialized). int* pa; /.. 더보기