본문 바로가기

Archived(CSE Programming)/cpp

(15)
Chap 15. 예외처리(Exception Handling) Chap 15. 예외처리(Exception Handling) 15-1. 예외상황과 예외처리의 이해 예외상황이란 말 그대로 예기치 못한 상황인데 구체적으로 들어간다면, 프로그램 실행 중에 발생하는 예기치 못한 상황이다. 따라서 컴파일 오류와 구분되는 것으로 0으로 나눗셈을 처리하게 된다든지 나이를 입력하랬는데 음수를 입력한다든지 이러한 프로그래머가 설계한 상황과 맞지 않은 상황을 보고 예외라고 한다. 12345678910111213void main (){ int age; coutage; // 예외상황 발견 if (age
Chap 14. 템플릿(Template) 2 Chap 14. 템플릿(Template) 2 14-1. chap 13에서 공부한 내용의 확장 12345678910111213141516171819202122232425262728293031template class Point{private: T xpos,ypos;public: Point(T x, T y):xpos(x),ypos(y){}}; template class Array{private: T * arr; int len;public: Array(int l):len(l){ arr = new T[len]; } ~Array(){ delete[] arr; }}; // 메인함수void main(){ Array intArr(5); Array pointArr(3); Array pointPtrArr(3); typed..
Chap 13. 템플릿(Template) 1 Chap 13. 템플릿(Template) 1 13-1. 템플릿에 대한 이해와 함수 12int add(int, int);double add(double, double);cs 템플릿은 말 그대로, 틀을 의미한다. 우리가 더하기를 수행하는 함수를 만들 때, 자료형이 다른 경우 오버로딩으로 해결하려하여도 반환형 까지 다르면 완전히 다른 함수를 만들어야 한다. 이 때, 우리는 자료형에 독립적인 함수를 만들 수 있는데 (정확히는 함수의 틀을 만들 수 있다) 그것이 바로 템플릿이다. 1234template T add(T num1, T num2){ return num1+num2;}cs 다음과 같이, template을 선언해주고 자료형 매개변수로 T가 어떤 의미인지 명시해준다. 그리고 원하는 자료형 부분을 T로 치환해주..
Chap 12. String 클래스의 디자인 Chap 12. String 클래스의 디자인 본 챕터에서는 cpp 표준으로 제공하는 라이브러리의 string class를 String class로 커버하는 것으로 대체한다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115#include #include using namespace std; class String{ // 멤버변수priv..
Chap 11. 연산자 오버로딩 2 Chap 11. 연산자 오버로딩 2 11-1 반드시 해야하는 대입 연산자의 오버로딩. 연산자 오버로딩에 대해서 Chap 10에서 살펴봤다.그 중에서 대입 연산자의 경우 operator= 에서 우리가 앞서 공부했던 복사 생성자와 같은 문제점을 지니고 있다.바로 얕은 복사의 문제점이다. default 대입 연산자의 경우 단순 멤버의 이동만 진행하여, 동적할당 된 같은 메모리 공간을 두 변수 이상이 가르키게 되는 문제점이 있다.추가적으로 대입 연산자의 경우, 복사 생성자와 달리 기존의 값들이 존재하는 변수에다가 변수를 할당하는 것으로 기존의 동적할당 되어 있는 메모리 공간도 비어주어야 한다. 12345678// 복사 생성자의 경우Point pos1(3,4);Point pos2 = pos1; // Point(c..
Chap 10. 연산자의 오버로딩 1 Chap 10. 연산자의 오버로딩 1 10-1.연산자 오버로딩의 이해와 유형 연산자 오버로딩이란 cpp 내에서 사용할 수 있는 연산자를 객체들 간에서도 사용할 수 있도록 하는 것이다.가령, Point pos1 = pos2 + pos3; 와 같은 형태로 객체 간의 덧셈에 대해서 연산을 규정할 수 있다. 방법은 다음과 같이 멤버함수, 전역함수 두 가지의 방법이 있고 operator연산자 함수를 오버로딩하여 사용하면 된다. 12345678910111213141516171819202122232425262728class Point{private: int xpos; int ypos;public: Point(int x, int y) :xpos(x),ypos(y){} // 멤버함수 연산자 오버로딩 Point opera..
Chap 9. 가상(Virtual)의 원리와 다중상속 Chap 9. 가상(Virtual)의 원리와 다중상속 9-1. 멤버함수와 가상함수의 동작원리 논리적으로는 객체 안에 멤버함수를 가지는 것이 타당하다.이는, C 스타일의 해당 함수 포인터를 통해 특정 함수의 주소 공간을 각 객체에서 가르키고 있는 형태와 유사하다고 할 수 있다.즉, 각 클래스의 내부에 함수 주소 공간을 가르키는 포인터 형이 있고 실제 함수의 공간을 따로 할당이 되어있는 것이다. 그리고 V-Table 이라고 하는, 가상함수 테이블(virtual table)을 통해 해당 클래스마다 호출할 수 있는 함수의 목록을 나열해둬서 우리가 가상함수를 통해 오버라이딩 하였을 경우, 상위 클래스의 동일 함수는 가려지고 하위 클래스의 동일 함수가 목록에 있어서 실제 객체에 따라 특정 함수가 호출되는 형태를 통..
Chap 8. 상속과 다형성 Chap 8. 상속과 다형성 8-1. 객체 포인터의 참조관계 객체 포인터 변수는 해당 자료형의 객체 뿐만 아니라 해당 객체를 직간접적으로 상속하는 모든 객체를 가르킬 수 있다.그렇지만 특정 포인터의 자료형에 따라 사용할 수 있는, 접근할 수 있는 범위는 제한된다. 123456789101112131415161718192021222324252627282930313233#include class Person{// 멤버변수private: int age;// 멤버함수public: Person(int a) : age(a){} void funct(){ std::cout