프로그래밍 관련/C++
C++ 강좌 17편. 예외 처리(Exception Handling)
C++ 강좌 17편. 예외 처리(Exception Handling)
2012.11.171. 예외 처리(Exception Handling) 예외 처리(Exception Handling)에서 예외(Exception)이란 프로그램 실행 도중에 일어나는 비정상적인 상황을 의미합니다. 이런 상황이 벌어질때, 이를 처리하는 과정을 예외 처리라고 합니다. 예를 들어서, 나눗셈 프로그램에서 사용자로부터 두 개의 정수를 입력받는데, 나누는 수를 0으로 입력한것과 같이 말이죠. 직접 그런 프로그램을 만들어 보도록 합시다. #include using namespace std; int main() { int a, b; cout > a >> b; cout
C++ 강좌 16편. 템플릿(Template)
C++ 강좌 16편. 템플릿(Template)
2012.11.171. 템플릿(Template)템플릿(Template)이란, 말 그대로 "형틀"이라는 의미를 지니고 있습니다. 무엇을 찍어내는 틀, 비유하자면 붕어빵 틀에 비유할 수 있습니다. 템플릿은 모양, 틀을 본을 떠 놓은것이고, 집어 넣는 재료에 따라 결과가 조금씩 달라집니다. 붕어빵 역시도, 재료만 가지고 똑같은 모양으로 찍어낼 수 있으며, 넣는 재료에 따라 내용물은 조금씩 달라집니다. 이 템플릿은, 기능은 이미 결정되어 있으나 자료형이 정해지지 않는다는 특징을 지니고 있습니다. 이제 함수 템플릿, 클래스 템플릿에 대해 알아보려고 하는데, 함수 템플릿(Function Template)은 말 그대로, 함수를 찍어내는 틀을 말합니다. 클래스 템플릿(Class Template)은 클래스를 찍어내는 템플릿이죠. 우선, ..
C++ 강좌 15편. 연산자 오버로딩(Operator Overloading)
C++ 강좌 15편. 연산자 오버로딩(Operator Overloading)
2012.11.161. 연산자 오버로딩(Operator Overloading)이번엔 함수 오버로딩, 생성자 오버로딩도 아닌 연산자 오버로딩입니다. 함수 오버로딩, 생성자 오버로딩은 함수명, 생성자명이 같으나, 인자의 자료형이나 수가 다른 함수의 선언을 허용하여 여러 기능을 가진 함수를 제공하는데, 연산자 오버로딩은 그렇다면 기존의 연산자 말고 다른 기능을 제공하는 연산자를 추가할 수 있는 것일까요? 우선 아래의 예제를 먼저 보도록 합시다.#include using namespace std; class NUMBOX { private: int num1, num2; public: NUMBOX(int num1, int num2) : num1(num1), num2(num2) { } void ShowNumber() { cout
C++ 강좌 14편. 상속 오버라이딩과 가상 함수, 그리고 다중 상속
C++ 강좌 14편. 상속 오버라이딩과 가상 함수, 그리고 다중 상속
2012.11.141. 상속 오버라이딩(Inheritance Overriding)상속 오버라이딩을 보자니, 전에 배웠던 함수 오버로딩이 생각나지 않나요? 오버로딩이 인자의 자료형이나 수가 다른 함수를 같은 이름으로 여러번 중복 정의하는 것이라면, 오버라이딩은 이미 있는 함수를 무시해버리고 새롭게 함수를 재정의하는 것이라고 말할 수 있습니다. 더 자세히 말하자면, 이 오버라이딩(Overriding, 재정의)는 부모 클래스와 자식 클래스의 상속 관계에서, 부모 클래스에 이미 정의된 함수를 같은 이름으로 자식 클래스에서 재정의 하는것을 의미합니다. (이 때, 부모의 멤버 함수와 원형이 완전히 같아야 합니다. 그리고 오버라이딩시 부모 클래스의 함수가 모두 가려집니다.) #include using namespace std; cla..
C++ 강좌 13편. 객체 배열과 객체 포인터 배열, this 포인터
C++ 강좌 13편. 객체 배열과 객체 포인터 배열, this 포인터
2012.11.131. 객체 배열(Object Array)변수 배열, 구조체 배열은 들어보셨어도 객체 배열에 대해서는 들어보셨나요? 객체 배열도 다른 배열과 마찬가지로 비슷한 형식으로 선언됩니다. (데이터 타입 대신 클래스명이 위치합니다.) 객체 배열은 아래와 같은 방법으로 쉽게 만들 수 있습니다. 클래스명 객체명[크기];아래는 Student 객체를 배열로 만들어 각각의 요소들의 이름, 나이, 학번등을 초기화하는 예제입니다. #include using namespace std; class Student { private: char name[10]; int age; int studentID; public: Student() { cout
C++ 강좌 12편. 상속(Inheritance)
C++ 강좌 12편. 상속(Inheritance)
2012.11.121. 상속(Inheritance)이란? 여러분이 알고계시는 '상속(Inheritance)'은 무엇인가요? 물론, 이미 타 언어에서 상속을 미리 만나보신 분들도 있겠지만, 아닌 분들도 계실겁니다. 상속은 "일정한 친족적 관계가 있는 사람 사이에 한 쪽이 사망하거나 법률상의 원인이 발생하였을 때 재산적 또는 친족적 권리와 의무를 계승하는 제도" 라고 네이버 사전에 정의되어 있습니다. 쉽게 말해서, 부모님이 돌아가시면 부모님의 재산을 모두 물려받게 되는거죠. 그런데, 이런 상속이 C++에서도 존재합니다. 바로 우리가 전에 배웠던 클래스에서 말입니다.예를 들어서, 사람이란 클래스와 학생이란 클래스가 있다고 가정을 해봅시다. 사람이란 클래스 내에는 이름, 나이, 취미 등과 같은 속성과 함께, 일어나기, 잠자기, ..
C++ 강좌 11편. 프렌드(friend)
C++ 강좌 11편. 프렌드(friend)
2012.11.111. 프렌드(friend) 여러분이 알고계시는 friend의 뜻은 무엇인가요? 아시고 계시듯, friend는 "친구"라는 뜻을 가지고 있습니다. C++에서에 friend도 마찬가집니다. 클래스와 클래스끼리 친구(friend)관계를 형성할 수 있습니다. A와 B란 클래스가 존재한다고 합시다. A, B 클래스 둘 다 private 멤버를 가지고 있습니다. 우리가 알고있듯, private 멤버는 외부에서 접근할 수 없습니다. 그런데, A 클래스 내에서 B 클래스를 친구로 지정하면, B 클래스는 A 클래스의 private 멤버에 직접 접근이 가능해집니다. 그러나, A 클래스에서는 B 클래스의 private 멤버에 직접 접근이 불가능합니다. A 클래스도 가능하게 해주기 위해서는, B 클래스 내에서도 A 클래스를 ..
C++ 강좌 10편. 참조자(Reference)
C++ 강좌 10편. 참조자(Reference)
2012.11.101. 참조자(Reference) 참조자(Reference, 레퍼런스)는 간단히 말하면 변수에 또 하나의 별명을 붙여주는 녀석입니다. 할당된 어느 메모리 공간에 이름에, 둘 이상의 이름을 부여하는 것이므로 대상이 이름이 존재하지 않을 경우에는 역시, 참조할 수 없습니다. 간단히 a란 변수에 aa라는 별명을 붙여주어 보도록 하겠습니다. int a=50; int &aa=a; 위를 보시면, a라는 변수를 선언과 동시에 50이란 값으로 초기화 되었고, 그 아래의 aa란 녀석에 a가 대입되었습니다. 한가지 특이한 점은 aa의 이름 앞에 &(주소 반환) 연산자가 붙는다는 것입니다. 이 주소 반환 연산자는 우리가 C언어에서 포인터를 공부할 때 한번 본 기억이 있죠? 물론, 변수 앞에 & 연산자가 붙으면 그 변수의 주소..
C++ 강좌 9편. Bool, Inline
C++ 강좌 9편. Bool, Inline
2012.11.091. Bool 오늘은 'Bool' 이라는 논리 자료형에 대해 알아보도록 하겠습니다. 논리, 말 그대로 참(true)과 거짓(false)으로만 구성되어 있는 자료형입니다. 이 true와 false는 논리 연산자(&&, ||, !)에서 자주 봤었죠? 과연 true과 false는 어떤값을 나타낼까요? 아래는 cout문으로 true와 false를 출력한 것입니다. #include using namespace std; int main() { cout
C++ 강좌 8편. 생성자와 소멸자(Constructor and Destructor)
C++ 강좌 8편. 생성자와 소멸자(Constructor and Destructor)
2012.11.081. 생성자(Constructor) 오늘은 객체 생성/소멸시에 호출되는 생성자와 소멸자에 대해 알아보도록 하겠습니다. 우리는 바로 전 강좌에서, private로 지정된 필드(=멤버 변수)를 초기화 시키기 위하여 SetInfo 함수를 따로 만들어 초기화 시켜주었습니다. 그런데, 이것보다 더 편하게 객체 생성과 동시에 초기화 시켜주는 녀석이 있습니다. 그 녀석이 바로 생성자라는 녀석입니다. 아래는 생성자의 형식입니다. class 클래스명 { public: 클래스명(매개변수..) { // ... } // .. } 위의 형식을 보시면, 생성자를 정의할때 생성자의 이름이 클래스의 이름과 같습니다. 생성자도 함수와 같이 매개변수를 가질 수 있습니다. 그리고 반환형이 없습니다. 한번 SetInfo 함수 대신 생성자를..
C++ 강좌 7편. 클래스(class)
C++ 강좌 7편. 클래스(class)
2012.11.041. 클래스(class) 클래스란 무엇일까요? 다른 언어를 공부하시다가 '클래스(class)'라는 말을 들어보신 분도, 그렇지 않은 분도 계실겁니다. C++의 클래스는, 쉽게 말하자면 C의 구조체에서 확장된 C++의 구조체의 또다른 이름입니다. 클래스는 변수와 함께 함수까지도 포함시킬 수 있습니다. 그럼, C++의 구조체와 클래스는 다른게 무엇인가요? 라는 궁금증을 품고 계시는 분들도 있을텐데, 구조체와 클래스의 차이점은 기본 접근 제한자의 차이일뿐, 그 이상 다른게 없습니다. 구조체 같은 경우는 기본 접근 제한자가 public이며, 클래스의 기본 접근 제한자는 private으로 제한되어 있습니다. '둘다 동일한 기능을 하면서도 왜 사라지지 않을까요?'에 대한 답은, C언어와의 하위 호완성을 위해서 남겨..
C++ 강좌 6편. 구조체의 확장
C++ 강좌 6편. 구조체의 확장
2012.11.011. C언어의 구조체C언어의 구조체를 다시한번 살펴보도록 합시다. 우리는 C언어 12강에서 구조체를 사용하여 관련있는 변수들끼리 묶어 손쉽게 관리를 할 수 있었습니다. 예를 한번 보도록 합시다. #include struct student { int id; char *name; float percentage; }; // 구조체 뒤에 세미콜론이 와야함 int main() { struct student s={1, "김철수", 90.5}; printf("아이디: %d \n", s.id); printf("이름: %s \n", s.name); printf("백분율: %f \n", s.percentage); return 0; } 결과: 아이디: 1 이름: 김철수 백분율: 90.500000 계속하려면 아무 키나 누르십..