분류 전체보기(140)
-
c/c++ 연산자 오버로딩
c/c++에서 기본으로 제공되는 연산자들을 클래스에서 사용하기 위해 오버로딩하여 비슷하거나 다른 연산방식을 위해 재정의해서 사용하는 기법. 규칙 1. 새로운 연산자는 창조 불가. - 없는걸 오버로딩할수는 없음. 2. 연산자는 non-static 클래스 멤버함수이거나 전역함수로 오버로딩 가능. 3. 기본 타입에 대해서는 재정의 불가. 4. 단항, 이항 연산자에 대해서 가능. 5. 첫 인자는 항상 호출 클래스의 refrence 형. 6. 함수명은 operator 연산자 반환형은 호출 클래스 형 이거나 호출 클래스의 refrence 형. 호출 클래스의 refrence 로 반환형을 지정하는 경우는 연산자를 연속으로 사용하기 위해서이다.
2020.01.22 -
c/c++ 복사생성자 & 복사 대입연산자
복사 생성자 객체 생성시에 인자값으로 같은 클래스 객체를 넘겨주거나 객체 생성시에 같은 클래스 객체를 대입하려 한다면 호출되는 생성자. 오버로딩되어있지 않으면 컴파일러가 자동 생성함. 기본 복사생성자 : 컴파일러가 자동생성하는 복사생성자. 얕은 복사를 기본으로함. 얕은 복사 : 각 멤버 변수에 할당된 값만 복사. 동적 할당된 메모리까지 복사하지는 않음. 즉, 포인터의 주소만 가져올뿐, 본 객체에서 할당된 메모리에 저장된 값까진 복사하지 않음. 깊은 복사 : 동적 할당된 메모리에 저장된 값까지 복사. 인자값으로 해당 객체의 const refrence 가 필요하며, 복사중에 대상 객체가 변경되는것을 막고, 중첩해서 복사생성자가 호출되는 것을 막기 위함.. 복사생성자 호출되는 경우 1. 객체를 생성할때, 기존..
2020.01.22 -
Tree - Normal
나무를 형상화한 자료구조로 뿌리부터 가지, 나뭇잎으로 세분화되는 구조에서 착안된 구조. 그래프 구조의 특별한 타입이기도 하다. 루트 : 트리의 최상위 노드. 리프 : 트리의 최하위 노드. 엣지 : 부모자식노드사이를 연결하는 선. 노드 : 트리의 구성요소. 자식과 연결될 포인터와 데이터를 저장할 공간을 가짐. 차수 : 같은 부모에 최다 연결된 노드의 수. 깊이 : 루트에서 해당 노드까지의 직선 엣지수 형제 노드 : 부모가 같은 노드들. 조상 노드 : 부모부터 루트까지의 모든 노드 자손 노드 : 자식에서 리프 노드까지의 모든 노드. 레벨 : 루트를 기준으로 1부터 깊이에 따른 노드집합. 트리의 특수한 타입으로 이진트리, 이진 탐색트리, AVL 트리, Red-Black 트리, B 트리, B+ 트리, 최소 신장..
2020.01.21 -
c/c++ 예외처리
예상치 못한 오류를 안전하게 처리해서 코드가 안전하게 동작할수 있도록 하는 기법. try, throw, catch 문 try 문 : 예외가 발생할 만한 코드 블록 throw 문 : try 블록에서 발생한 오류에 대한 정보 전달 던짐. catch 문 : 던져진 정보를 담아 처리할 내용을 담은 코드 블록. 순서대로 try { 예외가 발생할만한 코드 throw something; } catch (value something) { 예외 처리 코드. } try 문에서 예외가 발생하지 않으면 throw, catch 무시. try 문에서 예외가 터지면 throw를 통해 가까운 catch 문부터 검사. 없으면 바깥쪽 try문과 쌍을 이루는 catch 문 검사. 제일 바깥쪽까지 반복 후, 없으면 terminate() 함..
2020.01.21 -
c/c++ virtual, interface, abstract class
가상함수 : 함수의 인터페이스와 구현까지 완료되어 있고, 서브 클래스에 꼭 상속해야할 함수. 재구현 할 필요까진 없으나 재구현 가능한 함수. 순수 가상함수 : 함수의 인터페이스만 작성되어 있고, 서브클래스에 꼭 상속하고 필히 구현해야하는 함수. 인터페이스 클래스 : 순수 가상함수로만 이루어진 클래스. 어떤 기능이 필요할지 설계하는 클래스. 객체화 불가능 한 클래스. 상속받은 클래스는 인터페이스를 꼭 전부 구현해야함. 추상 클래스 = 가상 클래스 가상함수가 하나 이상 정의된 클래스.
2020.01.21 -
c/c++ 상속(2)
다중 상속 말그대로 상속을 여러번 받는것을 의미한다. 여러 단계의 상속이 아니고, 한번에 여러 슈퍼 클래스에서 동시 상속 받는 것을 의미한다. 장점보다 단점이 더 명확해서 자주 쓰이지 않음. 장점 : 여러 슈퍼클래스를 동시에 사용할수 있다. 단점 : 슈퍼클래스 사이의 중복된 이름의 멤버 변수나 함수가 있는 문제, 슈퍼클래스를 이중 상속받는 문제 가상클래스가 아닌 슈퍼클래스를 상속받을 경우, 슈퍼클래스가 어떤것인지 특정 되지 않기때문에 슈퍼클래스의 포인터로 파생클래스를 가리킬수 없게 됨. 다형성 멤버 함수 오버로딩, 생성자 오버로딩, 연산자 오버로딩, 가상함수를 이용한 함수 오버라이딩을 이용해 "같은 요청에 대해 다른 응답을 줄수 있게 하는 것" 이라고 할 수 있다. 가령 Sum 이라는 더하기 함수에 대해..
2020.01.21