책정리/혼자 연구하는 C,C++ 2 18

31장 템플릿

31.1 함수 템플릿 31.1.1 타입만 다른 함수들 C++은 여러 가지 개발 방법을 지원하는 멀티 패러다임 언어라고 하는데 적어도 다음 세 가지 방법으로 개발 할 수 있다. 구조적 프로그래밍 C언어와 마찬가지로 함수 위주로 프로그램을 작성할 수 있다. 객체지향 프로그래밍 캡슐화, 추상화를 통해 현실 세계의 사물을 모델링할 수 있으며 상속과 다형성을 지원하기 위한 여러가지 언어적 장치를 제공한다. 일반화 프로그래밍 임의 타입에 대해 동작하는 함수나 클래스를 작성할 수 있다. 객체 지향보다 재사용성과 편의성이 더 우수하다. 일반화 프로그래밍은 주로 C++ 템플릿에 의해 지원되며 C++ 표준 라이브러리가 일반화의 좋은 예이다. 템플릿은 C++이 일반화를 위해 제공하는 가장 기본적인 문법이므로 템플릿에 대한 ..

30장 다형성

30.1 가상 함수 가. 객체와 포인터 가상 함수란 클래스 타입의 포인터로 멤버 함수를 호출 할 때 동작하는 특별한 함수이다. 객체 지향의 중요한 특징인 다형성을 구현하는 문법적 기반이 바로 가상 함수이다. Human h("aa"); Student s(""ss", 9090); h = s // 가능 s = h // 에러 부모 클래스의 객체인 h가 자식 클래스의 객체인 s를 대입받는 것은 논리적으로 가능하다. 왜냐하면 h가 대입받을 모든 멤버가 s에 있기 때문이다. is a관계가 성립된다. s와 h에 동시에 존재하는 모든 멤버가 h로 대입되며 s에는 있지만 h에는 없는 멤버는 대입에서 제외된다. h = s 대입에 의해 h는 s가 가지고 있는 이름 정보를 가지게 될것이다. 그러나 대입은 가능하지만 우변의 정보..

29장 상속

29-1 상속 가. 클래스 확장 상속은 캡슐화, 추상화와 함께 객체 지향 프로그래밍의 중요한 특징 중 하나이다. 캡슐화와 추상화는 객체가 온전한 부품이 될 수 있는 방법을 제공하는데 비해 상속은 클래스를 좀 더 쉽게 만들 수 있는 고수준의 재사용성을 확보하고 클래스간의 계층적인 관계를 구성함으로써 객체 지향의 또 다른 큰 특징인 다형성의 문법적 토대가 된다. 상속을 하는 목적 또는 상속에 의한 효과는 다음 세 가지로 간략하게 요약할 수 있다. 기존의 클래스를 재활용한다. 가장 기본적인 효과이다. 공통되는 부분을 상위 클래스에 통합하여 반복을 제거하고 유지, 보수를 편리하게 한다. 공동의 조상을 가지는 계층을 만듬으로써 객체의 집합에 다형성을 부여한다. 상속을 할 때 원본 클래스가 어떤 것이라는 것을 밝히..

28장 연산자 오버로딩

28.1 연산자 함수 28.1.1 기본형의 연산자 연산자를 오버로딩 할 수 있다는 것은 C++ 언어의 큰 특징이며 클래스가 타입임을 보여주는 단적인 예라고 할 수 있다. 조금 어렵기는 하지만 문법이 체계적이어서 이해하고 나면 언어의 질서를 느낄 수 있으며 오히려 재미있기도 하다. 덧셈 연산문의 예 int i1=1, i2=2 ; double d1=3.3, d2=4.4 ; int i = i1 + i2 ; // 정수 덧셈 double d = d1 + d2 ; // 실수 덧셈 정수형과 실수형은 길이도 다르고 비트 구조도 상이해서 각 타입을 더하는 알고리즘이 분명히 다르겠지만 똑같은 연산자로 두 타입의 덧셈이 가능한 것이다. 이렇게 되는 이유는 덧셈 연산자가 피연산자의 타입에 따라 오버로딩 되어 있기 때문이다. ..

27장 캡슐화

27.1 정보 은폐 27.1.1 프로그램의 부품 구조적 프로그래밍 기법에서는 함수가 프로그램을 구성하는 기초적인 부품의 역할을 한다. C++(객체 지향 프로그래밍)에서는 기존의 함수가 맡고 있던 역할을 객체가 대신한다. 객체 안에는 속성과 동작이 캡슐화되어 있으며 이런 객체들이 모이고 서로 상호 작용하면서 프로그램을 구동 객체가 소프트웨어의 부품 역할을 충실히 수행하려면 여러 가지 조건을 만족해야 한다. 우선 관련된 속성과 동작을 한 곳에 모아 스스로 동작할 수 있도록 하는 캡슐화가 가장 기본적인 조건이다. 그리고 곡 필요한 인터페이스만 외부로 노출하고 세부 구현은 숨기는 추상성의 조건도 만족해야 한다. 그래야 최소한의 정보만으로 객체를 쉽게 사용할 수 있으며 부주의한 사용자로부터 자신을 방어할 수도 있..

26장 생성자

26.1 생성자 26.1.1 생성자 :: 객체 초기화 클래스의 객체를 선언하면 메모리에 이 객체가 즉시 생성된다. 그러나 메모리만 할당 될 뿐이지 초기화는 되지 않으므로 객체 내의 멤버 변수들은 모두 쓰레기값을 가지고 있을 것이다. 쓰레기값을 가지고 있는 객체는 쓸모가 없으며 그래서 객체 선언문 다음에는 통산 객체를 원하는 상태로 초기화하는 대입문이 따라온다. 객체를 초기화하는 이 특별한 함수를 생성자(Constructor)라고 부른다. 생성자는 클래스 스스로 자신을 초기화하는 방법을 정의하며 클래스를 기본 타입과 동등하게 만드는 언어적 장치이다. 생성자의 이름은 항상 클래스의 이름과 동일하며 필요할 경우 초기화에 사용할 인수를 받아들일 수 있지만 리턴값은 가질 수 없다. 예제 Constructor #i..

25장 클래스

25.1 OOP 25.1.1 소프트웨어 위기 하드웨어의 발전에 힘입어 컴퓨터 가격이 저렴해지고 활발하게 보급됨에 따라 컴퓨터의 활용 분야가 점점 넓어졌다. 컴퓨터가 업무와 생활 곳곳에 활용됨에 따라 특수한 용도에 맞는 다양한 소프트웨어가 필요해졌다. 또한 하드웨어가 빨라지고 대용량화됨으로써 컴퓨터로 할 수 있는 일들이 많아져 소프트웨어의 기능도 과거보다 훨씬 더 복잡해지고 만들기도 어려워졌다. 그러나 소프트웨어가 하드웨어의 발전을 따라가지 못하는 이런 현상을 소프트웨어 위기(Software Crisis)라고 함 소프트웨어의 위기 원인 기존 절차식 프로그래밍 방법의 낮은 생산성 절차식 프로그래밍은 간결하고 빠른 실행 파일을 만들기는 하지만 규모가 커지면 개발뿐만 아니라 유지보수에 한계를 드러 냈다.코드의 ..

목차

목차 3부 C++ 문법 제 25 장 클래스 25-1 OOP 가. 소프트웨어 위기 나. OOP의 특징 다. OOP 맛보기 25-2 C++로의 확장 가. 개선 사항 나. IOStream 다. new 25-3 구조체의 확장 가. 멤버 함수 나. 멤버 함수 작성법 다. 액세스 지정 25-4 클래스 가. class 나. 클래스는 타입이다 다. 인스턴스 라. 클래스의 예 제 26 장 생성자 26-1 생성자 가. 생성자 나. 파괴자 다. 생성자, 파괴자의 특징 라. 객체의 동적 생성 26-2 여러 가지 생성자 가. 디폴트 생성자 나. 복사 생성자 다. 멤버 초기화 리스트 26-3. 타입 변환 가. 변환 생성자 나. 변환 함수 다. 클래스간의 변환 제 27 장 캡슐화 27-1 정보 은폐 가. 프로그램의 부품 나. 몰라..