반응형

C++ 177

[C++] 30. 무효화

기반 클래스에서 정의한 멤버 메서드와 같은 이름으로 파생 형식에서 정의하면 어떻게 동작할까요? 파생 클래스에서 기반 클래스에 정의한 이름과 같은 이름으로 메서드를 만들면 기반 클래스에 정의한 메서드를 무효화합니다. 예를 들어 일반 프로그래머가 있고 EH 프로그래머가 있는데 대부분의 행위에 있어 EH 프로그래머는 일반 프로그래머와 같게 일을 한다고 가정합시다. 하지만 일반 프로그래머가 프로그래밍을 할 때 "생각하면서 코딩을 한다."와 같이 하는데 EH 프로그래머가 프로그래밍을 할 때는 "생각한 것을 문서화 하고 이를 보면서 코딩을 한다."고 해 볼게요. 이 때 일반 프로그래머의 프로그래밍이라는 메서드를 무효화합니다. //무효화#include #include using namespace std;class P..

[C++] 29. 접근 지정자 protected

이번에는 접근 지정자 protected에 관해 알아보기로 해요. 캡슐화에서 접근 지정자를 사용하여 멤버의 가시성을 설정할 수 있다는 것을 다뤘었죠. private으로 접근 지정한 것은 형식 내부에서 사용할 수 있고 public으로 지정하면 모든 곳에서 접근할 수 있다는 것은 이미 소개하였습니다. 파생 클래스를 정의하면 기반 형식의 멤버를 상속받는다고 하였는데 접근 지정을 private으로 설정한 멤버는 어떻게 접근할까요? priavate으로 접근 지정한 멤버는 파생 클래스에서도 접근할 수 없습니다. 분명히 상속받아 개체 내부에 있지만 가시성이 없어 접근할 수 없습니다. 이럴 때는 기반 클래스에서 protected로 접근 지정하여 파생 클래스에서 접근할 수 있게 해 주어야 합니다. 즉 protected 접..

[C++] 28. 파생 개체의 생성과 소멸 과정

이번에는 일반화 관계에 있는 파생 클래스 형식의 개체를 생성과 소멸 과정을 알아보기로 할게요. 파생 클래스 형식의 개체를 생성할 때는 기반 클래스를 생성한 후에 파생 클래스를 생성합니다. 실제 생성한 개체에는 기반 클래스에 정의한 멤버도 만들어지는 것이죠. 그리고 소멸할 때는 생성 과정의 역으로 파생 클래스의 소멸자를 수행한 후에 기반 클래스의 소멸자를 수행합니다. 다음은 이를 확인하기 위해 기반 클래스 음악가와 파생 클래스 피아니스트 클래스에 생성자와 소멸자를 추가하여 어떤 순서로 수행하는지 확인하기 위한 출력문을 작성한 예제 코드입니다. //파생 개체의 생성과 소멸 과정 #include #include using namespace std; class Musician { public: Musician(..

[C++] 27. 상속(일반화 관계) 개요

이제 OOP의 세 가지 주요 특징인 캡슐화, 상속, 다형성 중에 상속에 관해 알아볼게요. 상속은 다른 형식에 정의한 것을 마치 자신에서 정의한 것처럼 만드는 OOP의 특징입니다. 이러한 관계를 UML에서는 일반화 관계라 부르고 삼각형과 실선으로 관계를 표시합니다.일반화 관계는 “피아니스트는 음악가이다.”처럼 “이다.(is a)”로 나타낼 수 있는 관계입니다. 이 때 음악가처럼 일반적인 클래스를 기반 클래스라 말하며 피아니스트처럼 특수한 클래스를 파생 클래스라 부릅니다. C++에서 일반화 관계를 표현할 때 파생 문법을 이용합니다. 파생 문법은 파생 클래스를 정의할 때 기반 클래스를 다음처럼 나타냅니다. class Pianist : public Musician { }; 파생 클래스를 정의하면 기반 클래스에 ..

[자료구조와 STL] 18. list 만들기 – 더미 노드없는 이중 연결 리스트 소스 코드

//EHList.h – 더미노드가 없는 이중 연결 리스트 #pragma once namespace EHLIB {     templatetypename T>     class list     {         struct node         {             node *prev; //이전 노드의 위치 정보             node *next; //다음 노드의 위치 정보             T data; //노드에 보관된 요소             node(T data=0):data(data) //초기화             {                 prev = next = 0;             }         };       ..

[자료구조와 STL] 17. list 만들기 – 더미 노드없는 이중 연결 리스트

3. 2 list 만들기 – 더미 노드없는 이중 연결 리스트 이번에는 더미노드가 없는 이중 연결 리스트를 만들어 봅시다. 더미노드가 없는 이중 연결 리스트에도 node의 정의나 iterator의 정의는 차이가 없습니다. 여기에서는 차이가 있는 부분만 언급하겠습니다. 먼저, list를 생성했을 때의 초기 모습이 다를 것입니다. [그림 12] 더미노드 없는 이중 연결 리스트 초기화 모습 list(){ head = tail = 0; bsize = 0;} 생성자 메서드 외에 차이가 있는 부분은 노드를 매다는 hang_node와 노드의 연결을 끊는 dehang_hode와 시작 iterator를 반환하는 begin, 마지막 iterator를 반환하는 end가 있습니다. hang_node 메서드에서는 보관된 자료가 ..

[자료구조와 STL] 16. list 만들기 – 더미 노드있는 이중 연결 리스트 테스트

작성한 list가 정상적으로 동작하는지 확인해 봅시다. 앞에서 얘기한 것처럼 list를 사용하는 방법은 vector와 매우 유사합니다. 단지, vector에서는 인덱스 연산을 이용할 수 있었지만 list에서는 사용하지 못하는 정도의 차이라고 보시면 됩니다. vector를 이용하여 차례대로 요소를 보관하는 프로그램이나 vecor를 이용하여 특정 키순으로 보관했던 응용 프로그램 코드에서 vector를 list로 교체하더라도 정상적으로 동작합니다. //typedef vector StuCollection;typedef list StuCollection; 이러한 이유로 우리가 만든 list가 정상적으로 동작하는지 확인하기 위해 vector에서 만든 프로젝트 조금 수정하여 테스트할 수 있습니다. 기존 프로젝트에 작..

[자료구조와 STL] 14. list 만들기 – 더미 노드있는 이중 연결 리스트

3. 1 list 만들기 – 더미 노드있는 이중 연결 리스트 먼저, 프로젝트를 만들어 앞에서 만든 파일들을 추가하는 것부터 하세요. 그리고 EHList.h를 추가합시다. EHList.h에는 템플릿 클래스인 list를 정의할 것입니다. 우리가 만들 list도 EHLIB 이름 공간 내에 정의할게요. #pragma oncenamespace EHLIB{ template class list { };}; list 클래스 내부에는 node 형식이 정의해야 합니다. 그리고 node의 멤버로는 보관할 요소와 다른 노드의 위치 정보가 있어야 할 것입니다. 여기에서는 이중 연결리스트로 만들 것이기 때문에 두 개의 링크를 캡슐화할게요. templateclass list{ struct node { node *prev; //이전..

[자료구조와 STL] 13. list (연결리스트)

3. list (연결리스트) STL에서 제공하는 선형 컨테이너에는 vector 와 list가 있는데 연결 리스트를 표현한 것입니다. 연결 리스트는 노드들의 선형 집합이며 노드는 데이터와 링크의 조합입니다. 연결 리스트는 자료를 보관할 때마다 별도의 노드를 생성하여 하나의 노드에 하나의 자료를 보관하며 노드의 링크를 통해 노드들이 서로의 위치를 선형적으로 유지하는 자료구조입니다. [그림 7] 연결 리스트 구조 연결 리스트는 링크의 개수에 따라 하나만 있는 단일(혹은 단순)연결 리스트, 두 개가 있는 이중 연결 리스트로 나눌 수 있습니다. 그리고 마지막 노드가 시작 노드의 위치 정보를 알고 있게 링크를 설정하는 연결 리스트를 원형 연결 리스트라 합니다. 이처럼 링크의 개수나 유형에 따라 연결 리스트를 구분하..

반응형