본문 바로가기

언어 공부30

STL iterator: 반복자. 컨테이너 안의 원소들을 순회할 때 사용된다. 포인터와 비슷. string 클래스는 STL과 유사하다. #include #include using namespace std; int main() { //string a = "abc"; //string a("abc"); //string a(3, 'C'); // CCC string a("inha", 2); // in string b(a); cout 2022. 7. 9.
파일 스트림 콘솔 스트림에서 사용되는 것들은 파일 스트림으로 상속이 된다. inStream.open(const char* inFile, ...) : 연결 통로를 연다. 열려고 하는 파일의 주소를 포인터로 가져옴. 파일 생성 #include #include #include using namespace std; int main() { //ofstream outStrm; // 출력용 객체 생성 //outStrm.open("integerFile.txt"); ofstream outStrm("integerFile.txt"); if(!outStrm.is_open()) // 파일이 열리지 않았으면 { cout 2022. 7. 9.
표준 예외 클래스 invalid_argument 예외 #include #include using namespace std; // 함수 선언 int quotient(int first, int second); int main() { int num1, num2, result; for(int i = 0; i num1; cout > num2; // try-catch 블록 try { cout 2022. 7. 9.
템플릿_스택 구현 # stack.h #ifndef STACK_H #define STACK_H #include #include using namespace std; template class Stack{ private: T* ptr; int capacity; int size; public: Stack(int capacity); ~Stack(); void push(const T& element); T pop(); }; #endif # stack.cpp #ifndef STACK_CPP #define STACK_CPP #include "stack.h" // 생성자 template Stack::Stack(int cap) : capacity(cap), size(0) { ptr = new T[capacity]; } // 소멸자 tem.. 2022. 7. 9.
템플릿 같은 처리를 하는 코드를 여러 자료형에 적용해야 하는 경우, 일반화를 하여 타입에 상관없이 사용할 수 있다. 템플릿은 헤더파일에 정의한다. #include using namespace std; // 템플릿 함수 정의 template T smaller(T first, T second) { if(first < second) { return first; } return second; } int main() { cout 2022. 7. 9.
클래스와 예외 처리2 생성자 내부의 예외 처리 1. 스택에 객체를 생성한 경우 - 생성자 내부에서 예외 발생 생성자 내부에서 예외가 발생한다면 프로그램이 중단되며 또한 스택에 할당된 모든 메모리가 해제된다. (생성자가 중단되며 소멸자는 실행되지 않는다) 2. 힙에 객체를 생성하는 경우 - 정상 작동 1. 생성자 호출 -> 객체 생성, 스택에 삽입 2. 생성자 실행 -> 힙 메모리 할당, 값 저장 3. main으로 리턴, obj 변수에 객체 할당 4. 소멸자 호출 -> 힙에 할당된 메모리 해제 5. 스택에서 객체 삭제 - 생성자 내부에서 예외 발생 1. 생성자 호출 -> 객체 생성, 스택에 삽입 2. 힙에 메모리 영역 할당, 변수 저장할 때 예외 발생 3. 생성자 중단 -> 스택 해제로 객체 삭제. But, 소명자 호출X-힙 .. 2022. 7. 8.
클래스와 예외 처리 # dynamicArray.h #pragma once #include using namespace std; class DynamicArray { protected: int* arr; int size; public: DynamicArray(int arraySize); ~DynamicArray(); int getSize() const; int getAt(int idx) const; void setAt(int idx, int value); }; # dynamicArray.cpp #include "dynamicArray.h" DynamicArray::DynamicArray(int arraySize) { arr = new int[arraySize]; // 동적 메모리 할당 size = arraySize; } Dy.. 2022. 7. 7.
예외 처리2 1에서 발생한 문제를 해결하는 C++ 예외 처리 방법 try-catch 블록 try { 예외를 발생시킬 수 있는 코드 } catch(자료형 변수) { 예외를 처리하는 코드 } try 절에서 오류가 발생하면 예외를 발생시켜서 throw로 던진다. catch 절에서 예외가 발생했을 경우 프로그램이 중단되는 것을 막는 처리를 한다. 1. 함수 내부의 try-catch 블록 try-catch 블록이 모두 하나의 함수 내부에 포함된 경우. 예외가 발생하면 try절의 나머지 코드는 무시되고 catch구문으로 이동. 예오가 발생하지 않는다면 try 절의 남은 부분이 실행되고 catch 절은 무시된다. 거의 사용하지 않음 try { if(num2 == 0) { throw 0; // int 자료형의 예외를 발생 } re.. 2022. 7. 6.
예외 처리 1. 예외처리X 아무 것도 하지 않아서 예외가 있는 경우 프로그램이 런타임 때 중단된다. 아무 경고없이 중단돼서 프로그램에 좋지 않다. #include using namespace std; int main() { int num1, num2, result; for(int i = 0; i num1; cout > num2; result = num1/num2; // 예외를 발생시킬 수 있는 표현식 cout 2022. 7. 6.