Coding/C & C++ 15

C++ 예외처리

■ C++ 예외처리 ㆍ 예외처리 메커니즘 1. try - try 블록은 예외 발생에 대한 검사의 범위를 지정 - 해당 범위에서 예외가 발생하면 catch 블록에서 처리가 되고, 발생하지 않으면 catch 블록을 뛰어 넘긴다. - try 블록을 묶는 기준은 예외가 발생할만한 영역을 하나의 "일(Work)" 단위로 구성한다. try { // 예외 발생 범위 } 2. catch - catch 블록은 try 블록에서 발생한 예외를 처리하는 코드가 담기는 영역 catch(처리할 예외의 종류 명시) { // 예외처리 코드 } 3. throw - 예외가 발생했음을 알리는 키워드로, 예외 상황에 대한 정보를 전달한다. - throw except : except는 예외 상황에 대한 정보를 담고 있으며, 변수, 상수, 객..

Coding/C & C++ 2020.03.04

C++ 템플릿

■ C++ 템플릿 ㆍ 함수 템플릿(Function Template) 1. 함수 템플릿의 기본 정의 - "함수 템플릿"이란 함수의 기능은 결정되어 있지만, 자료형은 결정되어 있지 않은 함수를 만드는 도구로 "함수를 만드는 데 사용되는 템플릿" - 함수를 템플릿으로 정의하면, 컴파일러는 호출하는 자료형 당 하나씩 함수를 만든다. 그리고 "템플릿을 기반으로 만들어진 함수"를 "템플릿 함수"라고 한다. ex> #include using namespace std; template T Add(T num1, T num2) { return num1+num2; } int main(void) { coutstrlen(b) ? a : b; } template const char* Max(const char* a, const ..

Coding/C & C++ 2020.03.03

C++ 연산자 오버로딩 3(포인터 , (), 형 변환 연산자)

■ C++ 연산자 오버로딩 3(포인터, (), 형 변환 연산자) ㆍ 포인터 연산자 오버로딩 - 포인터 연산자는 아래와 같다. ① * : 포인터가 가리키는 객체에 접근 ② -> : 포인터가 가리키는 객체의 맴버에 접근(주소 값 반환) ex> class SmartPtr { private: Point* posptr; public: SmartPtr(Point* ptr) : posptr(ptr) { } Point& operator*() { return *posptr; } Point* operator->() { return posptr; } ~SmartPtr() { delete posptr; } } * 위 예시는 간단한 스마트 포인터 예시이다. ㆍ () 연산자 오버로딩 - () 연산자 오버로딩을 통해 함수처럼 동작..

Coding/C & C++ 2020.03.01

C++ 연산자 오버로딩 2(대입, 배열의 인덱스, new/delete 연산자)

■ C++ 연산자 오버로딩 2(대입, 배열의 인덱스, new/delete 연산자) ㆍ 대입 연산자 오버로딩 - 디폴트 복사 생성자와 마찬가지로 기본적으로 "디폴트 대입 연산자"가 있다. => 디폴트 대입 생성자는 멤버 대 멤버의 복사(얕은 복사)를 하기 때문에, 동적 할당 시 에러가 발생한다. 이를 해결하기 위해 깊은 복사를 하는 대입 연산자를 정의해야 한다. - person1 = person2 => person1.operator=(person2) ex> class Person { private: char* name; int age; public: Person(char* myname, int myage) : age(myage) { name = new char[strlen(myname)+1]; strcpy..

Coding/C & C++ 2020.03.01

C++ 연산자 오버로딩 1(기본 연산자, 단항 연산자, << 연산자)

■ C++ 연산자 오버로딩 1(기본 연산자, 단항 연산자) ㆍ 기본 연산자 오버로딩 - operator라는 함수 이름을 사용하여 오버로딩 - 객체도 기본 자료형 데이터처럼 연산이 가능하도록 취급할 수 있다. - 연산자 오버로딩을 하는 방법으로는 두 가지 방법이 있다(멤버함수, 전역함수) 1. 멤버함수에 의한 연산자 오버로딩 - Point pos3 = pos1 + pos2; => pos1 + pos2 == pos1.operator+(pos2) 2. 전역함수에 의한 연산자 오버로딩 - Point pos3 = pos1 + pos2; => pos1 + pos2 == operator+(pos1, pos2) ex> class Point { private: int xpos, ypos; public: Point ope..

Coding/C & C++ 2020.02.26

C++ 가상 함수

■ C++ 가상함수 / 순수 가상함수와 추상 클래스 ㆍ 가상함수 - "C++ 컴파일러는 포인터를 이용한 연산의 가능성 여부를 판단할 때, 포인터의 자료형을 기준으로 판단" - 가상 함수는 실제 가리키는 객체의 자료형을 기준으로 판단하게 해 준다. - virtual 키워드 선언 - 가상 함수로 선언한 함수에 대해 오버라이딩하는 함수들도 가상 함수가 된다. => 하위 클래스에서는 virtual을 쓰지 않아도 적용된다. ex> class First { public: virtual void MyFunc( ) { ... } }; class Second: public First { public: virtual void MyFunc() { ... } }; ㆍ 순수 가상함수와 추상 클래스 - 클래스 중에서는 객체 생성..

Coding/C & C++ 2020.02.25

C++ 상속 정리

■ C++ 상속 정리 ㆍ 상속 - 하위 클래스가 상위 클래스로부터 멤버변수와 멤버함수를 물려받는다. - 상속을 하는 이유는 "상속을 통해 연관된 일련의 클래스에 대해 공통적인 규약을 정의할 수 있다" ex> class Person { private: int age; char name[50]; public: Person(){ name = NULL; age = 0; } Person(int myage, char* myname) : age(myage) { name = new char[strlen(myname)+1]; strcpy(name, myname); } ~Person(){ delete []name; } void WhatYourName() const { ... } void HowOldAreYou() cons..

Coding/C & C++ 2020.02.24

C++ 생성자, 소멸

■ C++ 생성자, 소멸자 ㆍ 생성자 - 클래스의 이름과 함수의 이름이 동일 - 반환형이 선언되어 있지 않다 - 객체 생성 시 딱 한 번 호출된다 - 생성자도 함수의 일종이니 '오버로딩'이 가능 - 생성자도 함수의 일종이니 '디폴트 값'을 설정할 수 있다. ex> 오버로딩 사용 class SimpleClass { private: int num; public: SimpleClass(){ num=1; } SimpleClass(int n){ num=n; } }; ex> 멤버 이니셜라이저 사용 class SimpleClass { private: int num; public: SimpleClass() : num(0) { } SimpleClass(int n) : num(n) { } }; * 이니셜라이저를 이용하면 ..

Coding/C & C++ 2020.02.21

C/C++ 파일 분할과 헤더 파일의 디자인

■ C/C++ 파일 분할과 헤더 파일의 디자인 1. 헤더 파일을 include 하는 두 가지 방법 ① #include - 표준 헤더 파일을 포함시킬 때 ② #include "헤더 파일 이름" - 프로그래머가 정의하는 헤더 파일을 포함시킬 때 - #include "절대 경로/상대 경로" 로도 지정할 수 있다. - 상대 경로의 경우, 기준은 해당 소스파일이 있는 디렉터리가 기준이다. 2. 헤더 파일에 담아야 할 것들 ① 매크로: #define PI 3.145 등 ② 함수 선언: double Add(double num1, double num2); ③ 전역 변수 ④ 구조체: class, struct ex> 헤더 파일 중복을 막는 방법, #ifndef __STDIV2_H__ #define __STDIV2_H__ ..

Coding/C & C++ 2020.02.18

C/C++ 구조체(struct, class)

■ C/C++ 구조체(struct, class) ㆍ C와 C++ 비교 - 클래스와 객체의 차이는 구조체를 위한 함수들이 클래스의 경우 "종속성"을 띠지만, 객체의 경우 "전역함수"의 형태를 띠기 때문에 "종속성"을 나타내지 못하고 다른 영역에서 해당 함수를 호출하는 실수를 범할 수 있다. * C++에서는 객체 안에 함수를 넣을 수 있다. 1. C 언어(struct) ex> #define ID_LEN 20 #define MAX_SPEED 200 #define FUEL_STEP 2 #define ACC_STEP 10 #define BRK_STEP 10 typedef struct Car { char gamerID[ID_LEN]; int fuelGauge; int curSpeed; } Car; void Show..

Coding/C & C++ 2020.02.18