목록전체 글 (103)
배움 저장소
15.1 이동의 의미와 스마트 포인터 Move Semantics and Smart Pointers 스마트 포인터를 이해하기 위하여 이동의 의미를 이해하자 RAII : Resource Acquisition Is Initialization, ... binds the life cycle of a resource to the lifetime of an object. RAII를 위반하는 경우 - 동적할당 메모리를 저장하고 있는 포인터가 소멸될 때 동적할당메모리도 해제되어야 한다. 아래와 같은 경우 메모리를 해제하기 이전에 함수가 종료되어 메모리 누수가 발생하게 된다. int *ptr = new int[10]; // work with dynamic mem if (true) { return; } delete [] p..
14.1 예외처리의 기본 Exception Handling 프로그램은 정상적인 상황에 프로그램이 잘 작동할 뿐만 아니라 예외적인 상황에서도 그에 맞는 대처를 해야한다. 예외처리를 알아보자. 전통적인 예외처리 방법 (1) 함수 반환값으로 예외적인 상황을 알리는 경우 - 함수 내부에서 특정값을 예외적인 상황으로 표현한다. 함수 외부에서 이 값을 알고 있어야한다 int findFirstChar(const char* str, char ch) { for (size_t i = 0; i < strlen(str); ++i) if(str[i] == ch) return i; return -1; // no match } (2) 매개변수로 받은 값에 성공 여부를 알리는 경우 double divide(int x, int y, ..
같은 기능을 하지만 다른 자료형으로 동작하는 코드를 작성한다면 여러번 반복작업이 필요하다. 귀찮은 작업을 쉽게 해낼수 있는 템플릿을 사용해보자. 13.1 함수 템플릿 함수 템플릿에 특정 자료형을 사용하면 해당 자료형에 맞는 함수 코드가 만들어진다. 이를 Instantiation이라 표현한다. 자료형에 맞게 만들어진 함수 코드는 Instance라 부른다 //template // alternatives template T getMax(T x, T y) { return ( x > y ) ? x : y ; } int main() { std::cout

12.1 다형성의 기본 개념 자식객체가 상위 객체의 포인터를 사용하는 경우 자식 객체가 상위 객체의 포인터에 담겨 사용되는 경우 어떤 문제가 발생할까? 이 문제가 다형성과 관련있다 - 아래 예제에서 Cat 클래스는 Animal 클래스를 상속하였다. Cat 클래스가 오버라이딩한 멤버함수를 호출해보자. 아래에서 Cat Instance는 오버라이딩한 멤버함수를 호출한다. - Cat Instance를 Animal 포인터 자료형에 담아보자. 오버라이딩한 멤버함수를 호출해보자. 자식객체에서 구현한 오버라이딩이 적용되지 않는다! class Animal { protected: string m_name; public: Animal(string name): m_name(name){} string getName(){ ret..
11.1 상속의 기본 (1) Derived Class(상속받은 객체)는 Generalized Class(상위 객체)의 인스턴스를 멤버를 가지고 있다 class Mother { private: int m_i; public: int& getValue(){ return m_i; } void setValue(int i){ m_i = i; } }; class Child: public Mother {}; int main(){ Mother mom; mom.setValue(45); cout

10.1 객체들의 관계 Object Relationship 객체 지향 프로그램 설계 순서 (1) 프로그램이 수행하는 기능을 정의 (2) 기능을 수행하는데 필요한 여러 객체를 정의하고 상호작용을 결정 객체의 관계 다음과 같은 특성으로 구분할 수 있다 (1) 속한다: 객체 내부의 Instance를 다른 곳에서도 사용하는가? (2) 관리: 해당 객체의 소멸을 관계있는 객체가 결정하는가? (3) 방향성: 객체가 다른 객체의 멤버변수/함수를 활용하는기? 10.2 구성 관계 Composition 다음 예제에서 class Monster와 class Position2D는 Composition(구성관계)이다 main.cpp #include "Monster.h" using namespace std; int main() {..
9.1 산술 연산자 오버로딩 하기 add 함수를 구현해보자. Parameter가 늘어날 때마다 오버로딩을 해주어야 한다 class Cents { private: int m_cents; public: Cents(int cents=0){ m_cents = cents; } int getCents() const { return m_cents; } }; Cents add(const Cents& c1, const Cents& c2){ return Cents(c1.getCents() + c2.getCents()); } int main(){ Cents wallet1(5); Cents wallet2(13); cout
8.1 객체지향 프로그래밍과 클래스 C++에서 Struct(구조체) 내부에 멤버함수를 추가할 수 있다. 하지만 Struct에는 멤버 변수만 넣음이 일반적이다 멤버함수를 추가한다면 class를 사용해주자. C는 Struct에 멤버함수 추가를 금지한다 struct Friend { string name; string address; int age; double height; double weight; void print() { cout