1월, 2022의 게시물 표시
{{ label!='' ? 'Label : ' : (q!='' ? '검색 : ' : '전체 게시글') }} {{ label }} {{ q }} {{ ('('+(pubs|date:'yyyy-MM')+')') }}

[C++] The C++ Programming Language: 3. A Tour of C++: Abstraction Mechanism (2)

이미지
 3.2.2 Abstract Types   complex와 Vector같은 자료형 concrete 자료형이라 합니다. 그들의 표현이 그들의 정의 일부분이기 때문입니다. 곧, 내장 자료형과 닮았죠. 대조적으로, abstract 자료형은 구현의 세부사항으로부터 사용자를 완전히 격리한 것을 말합니다. 이는 표현으로부터 인터페이스를 분리하고 실질적인 지역 변수를 포기함으로써 이룰 수 있습니다.  따라서 우리는 abstract 자료형의 표현에 대해서 아무것도 알 수 없습니다. 반드시 자유 공간에 객체를 할당하고 참조나 포인터를 통해서 그들에게 접근해야 합니다.   먼저, 우리는 우리의 Vector 클래스를 더 추상화된 버전으로 설계하기 위해 Container라는 클래스의 인터페이스를 정의합니다: 1 2 3 4 5 6 class  Container  { public:     virtual  double &  operator[ ] ( int )   =   0 ;   // pure virtual function     virtual  int  size( )  const  =   0 ;   // const member function (§3.2.1.1)     virtual ˜Container( )   { }   // destructor (§3.2.1.2) } ; Colored by Color Scripter cs 이 클래스는 차후에 정의될 특정 컨테이너의 순수한 인터페이스입니다. virtual은 "이 클래스로부터 유도된 클래스에서 재정의될 수도 있다"는 의미입니다. (생략) =0은 해당 함수가 pure virtual임을 의미합니다. Container로부터 도출된 클래스는 반드시 이 함수를 정의해야 하죠.  (생략) 3.2.3 Virtual Functions   Container의 사용 예를 봅시다: 1 2 3 4 5 6 void  use(Container &  c) {     const  int  sz  =  c.size( ) ;      f

[C++] The C++ Programming Language: 3. A Tour of C++: Abstraction Mechanism (1)

이미지
3. A Tour of C++: Abstraction Mechanisms 3.1 Introduction   이 챕터에서는 여러분들에게 C++가 추상화와 자원 관리를 위해 지원하는 것들에 대해 간단하게 알려주는 데에 집중할 것입니다. 새로운 자료형을 정의하고 사용하는 방법을 약식으로 제공하죠. 특히, 기본 속성들, 구현 기법들, concrete 클래스 와 추상(abstract) 클래스 , 클래스 계층 에 사용되는 언어 기능들에 대해 알아볼 것입니다. 템플릿은 자료형을 인자화(parameterizing)하고, (기타)자료형 및 알고리즘에 관련된 알고리즘을 위한 메커니즘입니다. 사용자가 정의하거나 내장된 자료형의 연산은 함수, 때로는 템플릿 함수(template functions) 와 함수 객체(function objects) 로 일반화되어 나타납니다. 이들은 객체지향 프로그래밍과 제네릭 프로그래밍을 지원하는 언어 기능들입니다. 3.2 Classes   C++의 중앙에는 역시 클래스 가 있습니다. 클래스는 프로그램의 코드 내에서 특정한 개념을 표현하는 사용자 정의 자료형입니다. (생략)   기본 자료형, 연산자, 구문들 너머의 모든 언어의 기능들은 클래스를 좀 더 좋게 정의하고 쉽게 사용할 수 있도록 돕기 위해 존재합니다. "좀 더 좋게"라는 것은, 유지보수 하기에 좋고, 효율적이고, 우아하고, 쓰기 쉽고, 읽기 쉽고, 추론하기 쉽다는 의미입니다. 대부분의 프로그래밍 기법은 특정한 종류의 클래스들을 설계하고 구현하는 데에 의존합니다. 프로그래머의 요구와 취향은 매우 다양하죠. 곧, 클래스는 확장성을 위해 존재합니다. 중요한 세 가지 종류의 클래스를 살펴보도록 하죠: Concrete 클래스 추상(Abstract) 클래스 클래스 계층 내의 클래스   수많은 유용한 클래스들은 이 세 종류에 속하게 됩니다. 훨씬 더 많은 클래스들이 이 세 가지 유형의 변형으로 볼 수 있거나 이러한 기법들을 혼합해 구현된 것들로 볼 수 있습니다. 3.2.1 Concrete