Study/C++ 썸네일형 리스트형 String 클래스의 구조와 friend 선언을 통한 연산자 오버로딩의 출력 #include using namespace std;class MyString{ public: MyString(const char* str) { for(int i = 0; i str[i] = '\0'; } for(int i = 0; i str[i] = str[i]; } } void operator+=(const char* str) { int idx = 0; for(int i = len; i str[i] = str[idx]; idx++; } } friend ostream& operator 1. operatoroperator는 멤버 함수가 아닌 전역 함수로 정.. 더보기 Wrapper Class 기본 자료형을 객체로 쓸 때 사용한다.int num = 5;class Integer{private: int num;public: Integer(int num):num(num); Integer(Integer &i):num(i.num);} 더보기 Smart Pointer 스마트 포인터는 C++에서 제공하는 포인터의 한 형태로, 자동 메모리 관리를 지원하는 포인터다.C++은 C#과 같이 가비지 컬렉션을 지원하는 언어와는 다르게, 메모리를 동적으로 할당했다면 반드시 수동으로 해제해야 한다.이를 위해 등장한 것이 바로 스마트 포인터 이며, 스마트 포인터는 포인터가 가키리는 메모리를 더 이상 사용하지 않을 경우 자동으로 해제하는 역할을 한다.#include #include using namespace std;int main(){ unique_ptr uPtr(new int(1945)); // auto는 더 이상 쓰지 않는다. auto_ptr aPtr(new int(1945)); shared_ptr sPtr(new int(1945)); return 0;}.. 더보기 [C++] Header File 헤더파일에 들어갈 내용 1. 전역변수, extern keyword사용 2. 함수 프로토타입 3. define을 통한 식별자 및 매크로 4. 클래스 선언(함수 프로토타입 포함) 다른 C파일에 바디를 정의! 더보기 [C++] Exception 예외처리 if를 사용하면 쉽겠지만, C++에는 별도의 예외처리 메커니즘이 존재한다. try: 예외를 발견 catch: 예외를 잡기 throw: 예외를 던지기 try 블록은 예외발생에 대한 검사의 범위를 지정할 때 사용한다. 즉, try 블럭 내에서 예외가 발생하면 C++의 예외처리 메커니즘에 의해 처리된다. catch 블록은 try에서 발생한 예외를 처리하는 코드가 담기는 영역으로, 형태가 반환형이 없는 함수와 유사하다. catch 블록은 try블록 뒤에 이어서 등장하며, try에서 발생한 예외는 이곳 catch에서 처리된다. 즉, try와 catch는 하나의 문장이다. 만일 catch의 매개변수로 catch(...)을 한다면 전달되는 모든 예외를 받겠다는 뜻이다. throw는 예외 발생 시 발생을 알린.. 더보기 [C++] Template T T는 자료형을 결정짓지 않는담는 뜻이다. template ; template ; 둘 이상의 형에 대해 템플릿 선언을 위해서는 다음과 같이 하면 된다. template ; 템플릿 함수 간에는 오버로딩 또한 가능하며, 일반함수와 템플릿 함수간의 오버로딩도 가능하다. 함수 템플릿의 특수화(Specialization) 상황에 따라 템플릿 함수의 구성방법에 예외를 두는 경우를 말한다. 즉, 특정 매개변수에 대해서는 별도처리가 필요한 경우 사용한다. 템플릿 함수의 경우, 명시적 특수화만이 존재한다. template T max(T a, T b){ return (a > b ? a : b); } template double max(double a, double b) { return (a > b ? a : b); } .. 더보기 [C++] Operator Overloading part.2 유도 클래스의 대입 연산자에는 아무런 명시를 하지 않으면, 기초 클래스의 대입 연산자가 호출되지 않는다. 유도 클래스의 대입 연산자 정의에서, 명시적으로 기초 클래스의 대입 연산자 호출문을 삽입하지 않으면, 기초 클래스의 대입 연산자는 호출되지 않아서, 기초 클래스의 멤버변수는 멤버 대 멤버의 복사 대상에서 제외된다. class First { private: int num1, num2; public: ... First& operator=(const First& ref) { num1 = ref.num1; num2 = ref.num2; return *this; } ... } class Second : public First { private: int num3, num4; Second& operator=(co.. 더보기 [C++] Operator Overloading 연산자 오버로딩 1. 연산자 오버로딩의 이해 함수의 오버로딩은 오버로딩 된 수만큼 다양한 기능을 사용할 수 있다. 연산자 오버로딩도 이와 같다. 기존에 존재하던 연산자의 기본 기능 이외에 다른 기능을 추가할 수 있다. 다음의 코드를 보자. #include using namespace std; class Point { private: int xpos, ypos; public: Point(int x = 0, int y = 0) xpos(x), ypos(y) {} void ShowPosition() const { cout 더보기 이전 1 2 3 다음