전체 글
C++ 정리 - 31 (추상화 데이터형(abstract data type, ADT), 연산자 오버로딩, 프렌드의 도입)
추상화 데이터형(abstract data type, ADT) 스택의 특성을 일반적이고 추상적인 방식으로 살펴보자. 빈 스택 생성 가능 스택의 꼭대기에 항목 추가 가능 스택의 꼭대기에서 항목 삭제 가능 스택이 가득 차있는지 검사 가능 스택이 비어있는지 검사 가능 클래스의 활용 연산자 오버로딩 연산자 오버로딩은 c++가 가진 다형 특성의 한 예이다. 연산자 오버로딩은, c++ 연산자들에 다중적인 의미를 부여하는 것이다. c++에서는 연산자 오버로딩을 사용자 정의 데이터형 까지 확장할 수 있다. 예를 들어 2개의 배열을 더하는 것은 아주 쉬운 계산이다. for(int i=0;i(클래스 멤버 접근 포인터 연산자) 프렌드의 도입 프렌드는 다음과 같은 세 가지 형태로 사용됨. 프렌드 함수 프렌드 클래스 프렌드 멤버..
C++ 정리 - 30 (생성자 사용하기, 디폴트 생성자, 파괴자, c++11의 리스트 초기화, const 멤버 함수, this 포인터, 객체 배열, 클래스 사용 범위, 범위가 정해진 열거(c++11))
생성자 사용하기 1. Stock food = Stock("World Cabbage",250,1.25); 2. Stock garment("Furry Mason",50,2.5); new를 사용할 때 생성자 사용하는 법 Stock *pstock = new Stock("Ele G",18,19.0); 생성자는 객체에 의해 호출되는 것이 아니라, 객체를 생성하는 데 사용된다. 디폴트 생성자 디폴트 생성자는 명시적인 초기화 값을 제공하지 않을 때 객체를 생성하는 데 사용하는 생성자이다. Stock fluffy_the_cat; //디폴트 생성자 사용 사용자가 어떠한 생성자도 정의하지 않을 경우에만 컴파일러가 디폴트 생성자를 제공한다. 생성자를 정의한 후 디폴트 생성자를 정의하는 두 가지 방법 1. 기존의 생성자에 있는..
C++ 정리 - 29 (객체와 클래스, 절차식 프로그래밍과 객체지향 프로그래밍, 추상화와 클래스, c++의 클래스, 클래스 멤버함수의 구현, 인라인 메서드, 클래스 선언의 일반적인 형식, 클래스 생성..
객체와 클래스 객체 지향 프로그래밍(OOP)은 프로그램 설계 방법 중 하나이다. OPP의 가장 중요한 기능 추상화 캡슐화와 데이터 은닉 다형 상속 코드의 재활용 클래스(class)는 이러한 opp 기능들을 구현 및 결합하는데 가장 중요한 c++ 도구이다. 절차식 프로그래밍과 객체지향 프로그래밍 opp접근 방식을 사용하여, 프로그래머는 객체를 서술하는데 필요한 데이터와, 사용자가 그 데이터를 다루는 방법에 대해 생각하면서, 사용자가 이해하는 방식대로 객체에 초점을 맞춘다. 추상화와 클래스 -데이터형이란 무엇인가? 기본형을 서술하는 것은 다음과 같은 세 가지를 결정하는 것이다. 데이터 객체에 필요한 메모리의 크기를 결정한다 메모리에 있는 비트들을 어떻게 해석할지 결정한다 데이터 객체를 사용하여 수행할 수 있..
C++ 정리 - 28 (new 연산자를 이용한 초기화, 위치 지정 new 연산자, 이름 공간, using 선언과 using 지시자, 이름 공간에 대한 보충)
new 연산자를 이용한 초기화 변수를 생성하고 초기화하기 위한 저장공간을 원한다면, 괄호를 이용해 초기 값 설정 가능 int *pi = new int(6); double *pd = new double(99.99); 순차적인 구조체나 변수의 초기화는 c++11에서만 가능 또한 중괄호를 이용한 리스트 초기화를 사용해야 함 struct where{double x;double y;double z;}; where *one = new where{2.5,5.7,7.2}; int *ar = new int[4]{2,4,6,7}; c++11에서는 단일 값을 가지는 변수에 대해서도 중괄호를 이용한 초기화 가능 int *pin = new int{6}; double *pdo = new double{99.99}; 위치 지정 ne..
C++ 정리 - 27 (정적 존속 기간, 내부 링크, 정적 기억 존속 시간, 링크 없음, 기억 공간 제한자, Cv-제한자, mutable, const에 대한 보충, 함수와 링크, 기억 공간 형식과 동적 대입)
정적 존속 기간, 내부 링크 서로 다른 파일에서 서로 다른 변수들에게 같은 이름을 사용하는 법 같은 이름으로 정의된 외부 변수를 하나의 파일에서 static 외부 변수로 선언한다면, static으로 선언된 변수는 그 파일에서만 사용되는 변수로 인식된다. 정적 기억 존속 시간, 링크 없음 블록 안에서 static을 사용하면, static이 지역 변수를 정적 기억 존속 시간을 갖게 만든다. 이런 변수들은 블록 안에서만 알려지지만 그 블록이 활동하지 않는 동안에도 계속 존재한다. 그러므로 정적 지역 변수는 함수의 호출과 호출 사이에서도 값 보존 가능 기억 공간 제한자 auto(C++11에서는 제한자에서 빠짐) register static extern thread_local(C++11에서 추가됨) mutable..
(C++기초플러스 6판 프로그래밍 연습 정답,솔루션) CHAPTER 18 새로운 C++ 표준과의 만남 p.1540~ 1번~4번
1번 #include #include template T average_list(std::initializer_list il) { T sum = 0; for (auto it=il.begin(); it!=il.end(); it++) sum += *it; return sum / il.size(); } int main() { using namespace std; auto q = average_list({ 15.4, 10.7, 9.0 }); cout zcode; } Cpmv::Cpmv(Cpmv&& mv) :pi(mv.pi) { std::cout zcode; } if (obj.pi) { qcode += obj.pi->qcode; zcode += obj.pi->zcode; } Cpmv temp(qcode, zcod..
(C++기초플러스 6판 프로그래밍 연습 정답,솔루션) CHAPTER 17 입력, 출력, 파일 p.1458~ 1번~7번
1번 #include #include #include int main() { using namespace std; char ch; int count = 0; while (cin.get(ch)) { if (ch != '$') count++; else { cin.putback(ch); break; } } cout
(C++기초플러스 6판 프로그래밍 연습 정답,솔루션) CHAPTER 16 string 클래스와 표준 템플릿 라이브러리 p.1342~ 1번~10번
1번 #include #include bool palindrome(const std::string& s); int main() { std::string temp; std::cout
(C++기초플러스 6판 프로그래밍 연습 정답,솔루션) CHAPTER 15 프렌드,예외,기타 사항 p.1206~ 1번~4번
1번 // tv.h -- Tv 클래스와 Remote 클래스 #ifndef TV_H_ #define TV_H_ class Tv { public: friend class Remote; // Remote는 Tv의 private 부분에 접근할 수 있다 enum { Off, On }; enum { MinVal, MaxVal = 20 }; enum { Antenna, Cable }; enum { TV, DVD }; Tv(int s = Off, int mc = 125) : state(s), volume(5), maxchannel(mc), channel(2), mode(Cable), input(TV) {} void onoff() { state = (state == On) ? Off : On; } bool ison() ..
(C++기초플러스 6판 프로그래밍 연습 정답,솔루션) CHAPTER 14 C++ 코드의 재활용 p.1103~ 1번~5번
1번 //winec.h #ifndef WINEC_H_ #define WINEC_H_ #include #include #include template class Pair { private: T1 year; T2 num; public: T1 first() const { return year; } T2 second() const { return num; } Pair() {} Pair(const T1& y, const T2& n) :year(y),num(n){} }; class Wine { private: typedef std::valarray ArrayInt; typedef Pair PairArray; PairArray p; std::string label; int year_n; public: Wine(con..