본문 바로가기

분류 전체보기

CHAPTER14 - 템플릿(Template) 2 1. CHAPTER13에서 공부한 내용의 확장 C++ 표준 라이브러리는 템플릿을 기반으로 디자인된다. 따라서 템플릿을 잘 알면, 그만큼 라이브러리에 대한 이해도와 활용능력이 향상된다. 1.1 클래스 템플릿과 배열 클래스 템플릿 클래스 템플릿을 기반으로, 템플릿 클래스의 객체를 저장할 때에는 어떻게 생성해야 할까? 클래스 템플릿 기반의 객체 생성에는 일정한 규칙이 존재하기 때문에, 이는 어려운 문제가 아니다. 다음과 같이 객체를 생성하면, => BoundCheckArray arr(5); int형 데이터의 저장이 가능한 것처럼, 저장 대상의 자료형이 템플릿 클래스이니, 다음과 같이 객체를 생성할 수 있다. => BoundCheckArray arr(5); 그리고 저장 대상이 Point 템플릿 클래스의 객체가 .. 더보기
CHAPTER13 - 템플릿(Template) 1 1. 템플릿(Template)에 대한 이해와 함수 템플릿 1.1 함수를 대상으로 템플릿 이해하기 함수 템플릿은 함수를 만들어 낸다. 함수의 기능은 결정되어 있지만, 자료형은 결정되어 있지 않아서 결정해야 한다. 즉, '함수 템플릿'이란 함수를 만드는 도구이다. 함수 템플릿이 만들어 내는 함수의 자료형은 결정되어 있지 않다. int Add(int num1, int num2) { return num1 + num2; } 위 함수의 기능과 자료형은 다음과 같다. - 함수의 기능 : 덧셈 - 대상 자료형 : int형 데이터 이러한 함수를 만들어 낼 수 있는 템플릿은 다음과 같이 정의한다. T Add(T num1, T num2) { return num1 + num2; } 앞서 정의한 Add 함수와 비교해 보면, i.. 더보기
CHAPTER12 - String 클래스의 디자인 1. C++의 표준과 표준 String 클래스 string 클래스를 모델로 삼아서 연산자가 어떠한 형태로 오버로딩 되어 있는지 고민해 보고, 이와 유사한 문자열 처리 클래스를 직접 구현해 보는데 목적이 있다. 1.1 표준 string 클래스의 분석 먼저, string 클래스의 정의를 위해서 어떠한 것들이 요구되는지 하나씩 정리해 보겠다. (1) 문자열을 인자로 전달받는 생성자의 정의 (2) 생성자, 소멸자, 복사 생성자 그리고 대입 연산자의 정의 (3) 결합된 문자열로 초기화된 객체를 반환하는 + 연산자의 오버로딩 (4) 문자열을 덧붙이는 += 연산자의 오버로딩 (5) 내용비교를 진행하는 == 연산자의 오버로딩 (6) 콘솔입출력이 가능하도록 >>, 더보기
CHAPTER11 - 연산자 오버로딩 2 1. 반드시 해야 하는 대입 연산자의 오버로딩 이번에 설명하는 대입 연산자의 오버로딩은 그 성격이 복사 생성자와 매우 유사하다. 따라서 복사 생성자에 대한 이해를 바탕으로 대입 연산자를 이해하기 바란다. 1.1 객체간 대입연산의 비밀: 디폴트 대입 연산자 다음은 이전에 설명한 복사 생성자의 대표적인 특성이다. - 정의하지 않으면 디폴트 복사 생성자가 삽입된다. - 디폴트 복사 생성자는 멤버 대 멤버의 복사(얕은 복사)를 진행한다. - 생성자 내에서 동적 할당을 한다면, 그리고 싶은 복사가 필요하다면 직접 정의해야 한다. 그리고 다음은 이어서 설명할 대입 연산자의 대표적인 특성이다. - 정의하지 않으면 '디폴트 대입 연산자'가 삽입된다. - 디폴트 대입 연산자는 멤버 대 멤버의 복사(얕은 복사)를 진행한다.. 더보기
방정식과 부등식 - 6 1. 연립이차방정식의 풀이 1.1 미지수가 2개인 연립이차방정식의 풀이 (1) 연립방정식이 (일차식) = 0, (이차식) = 0의 꼴인 경우, 일차방정식을 어느 한 문자에 대하여 정리한 다음 대입. (2) (이차식) = 0, (이차식) = 0의 꼴인 경우 i. 한 이차방정식이 인수분해 가능하면 인수분해하여 두 일차방정식을 유도한다. ii. 각각의 일차방정식과 남은 다른 이차방정식을 연립하여 푼다. i. 두 이차방정식을 더하거나 빼어 이차항을 소거해 일차방정식을 유도한다. ii. 만들어진 일차방정식과 두 이차방정식 중 하나를 연랍하여 푼다. i. 두 이차방정식을 더하거나 빼어 상수항을 소거해 인수분해 가능한 이차방정식을 유도한다. (3) 연립방정식이 x + y = A, xy = B의 꼴로 변형되는 경우 -.. 더보기
CHAPTER10 - 연산자 오버로딩 1 C++에서는 함수뿐만 아니라 '연산자도 오버로딩이 가능'하다. 연산자의 오버로딩이 조금 생소하게 느껴질 수 있으나 기본 개념이 매우 단순하니 어렵지 않을 것이다. 참고로 연산자 오버로딩은 C++을 이해하는데 매우 중요한 요소이다. 1. 연산자 오버로딩의 이해와 유형 함수가 오버로딩 되면, 그 수만큼 다양한 기능을 제공하게 된다. 마찬가지로 연산자의 오버로딩을 통해서, 기존에 존재하던 연산자의 기본 기능 이외에 다른 기능을 추가할 수 있다. 1.1 operator+라는 이름의 함수 다음 예제를 이해한다면, 연산자 오버로딩은 쉽게 정복이 가능하다. class Point { private: int xpos; int ypos; public: Point(const int &x, const int &y) : xpo.. 더보기
방정식과 부등식 - 5 1. 고차방정식 고차방정식(equations of higher degree)이란, 삼차 이상의 방정식을 말한다. 1.1 고차방정식의 풀이 (1) 인수분해를 이용한 풀이 - 고차방정식 f(x) = 0은, f(x)를 인수분해한 후 등식의 성질을 이용하여 차수가 낮은 몇 개의 방정식으로 바꾸어 푼다. 고차방정식을 푸는 것이 쉽지 않기 때문에 따로 구분을 한다. 일차방정식의 근은 등식의 성질로 바로 구할 수 있었고, 이차방정식의 근은 근의 공식을 이용하면 어떠한 방정식도 바로 풀 수 있었다. 즉, 일반적인 해법이 존재했고 그리 어렵지 않았다. 하지만 고차방정식의 일반적인 해법은 사용하기 매우 까다로우며, 오차 이상의 방정식의 일반적인 해법은 존재하지 않음이 알려져 있다. 고차방정식에서 다항식을 인수분해할 때, .. 더보기
CHAPTER09 - 가상(Virtual)의 원리와 다중상속 1. 멤버함수와 가상함수와 동작원리 객체 내에 멤버함수가 존재한다고 설명해왔다. 이번 챕터에서는 멤버함수가 실제로 어디에 존재하는지를 설명하고자 한다. 단, 진실을 알고 난 이후에도 객체 내에 멤버함수가 존재한다고 인식하고 객체를 바라보기 바란다. 개념적으로는, 그리고 객체지향적 논리를 기준으로는, 객체 내에 멤버함수가 존재한다고 인식하는 게 옳으니 말이다. (1) 객체 안에 정말로 멤버함수가 존재하는가? 실제로는 객체가 생성되면 멤버변수는 객체 내에 존재하지만, 멤버함수는 메모리의 한 공간에 위치하고선 이 함수가 정의된 클래스의 모든 객체가 이를 공유하는 형태를 취한다. 즉 이것을 C언어 스타일의 구조체로 표현하면 다음과 같다. typedef struct A { int data; void (*showd.. 더보기
CHAPTER08 - 상속과 다형성(Polymorphism) 객체지향에서 가장 중요하다고 할 수 있는 '다형성(Polymorphism)'을 공부하는 챕터이다. 이 책 전체의 내용 중 가장 중요하다고 할 수 있다. 1. 객체 포인터의 참조관계 (1) 객체 포인터 변수 : 객체의 주소 값을 저장하는 포인터 변수 이전에 학습 내용에서 보았듯이, 클래스를 기반으로 포인터 변수를 선언할 수 있다. A *ptr; ptr = new A(); 그런데 클래스 A형 포인터는, A 객체 뿐만 아니라, A를 상속하는 유도 클래스의 객체도 가르킬 수 있다. class A {}; class B : public A {}; class C : public B {}; int main(void) { A *ptr1 = new B(); A *ptr1 = new C(); B *ptr2 = new C().. 더보기
방정식과 부등식 - 4 1. 이차함수의 그래프 이차함수 y = ax² + bx + c를 완전제곱식을 포함한 식으로 변형하면 다음과 같고, 그 그래프는 y = ax²의 그래프를 x축 방향으로 -b/2a만큼, y축의 방향으로 -(b²-4ac)/4a 축 : 직선 x = -b/2a 2. 이차함수의 그래프와 이차방정식의 해 이차함수의 그래프와 x축의 교점의 개수는 이차방정식 ax² + bx + c = 0의 실근의 개수와 같다. 이를 일반화하면, 이차함수 y = ax² + bx + c의 그래프와 y = mx + n의 교점의 개수는 이차방정식 ax² + bx + c = mx + n의 실근의 개수와 같다. 3. 이차방정식 근의 관한 문제 => 이차함수의 특수한 결과(즉, y = 0)가 나오는 시점이 언제인지 찾는 문제 => 이차방정식에서는 .. 더보기