프로그래밍 언어/C++ (9) 썸네일형 리스트형 펑터(Functor)를 쓰는 이유 1. Separation of concerns 기능을 나눌 수 있다. 예를 들어 반복하는 함수와 그에 대한 인자로 계산을 하는 펑터를 전달 인자로 주면 반복 기능을 하는 코드를 여러 번 적지 않고 간단하게 재사용할 수 있다. 이 외에도 기능을 나누는 수많은 상황에 적용 가능하다. (STL algorithm을 생각해보라는데 공부하고 추가함) 2. Parameterisation 객체를 매개변수로 쉽게 사용할 수 있다. 3. statefulness 펑터는 상태를 유지할 수 있다. 이 상태는 class의 인스턴스(객체)에 의해 유지되므로 Thread Safe를 지킬 수 있다. 4. Performance 펑터는 컴파일러에 의해 종종 인라인화 되기 때문에 성능 향상을 이끌어 낼 수 있다. 정리 펑터가 함수보다 객체.. 파일 입출력 Binary 자료형이나 객체를 바이너리 파일로 입출력할 수 있다. int 자료형 입출력 #include #include using namespace std; int main() { int i = 12; ofstream fileBinary("MyBinary.bin", ios_base::out | ios_base::binary); // fileBinary.write((const char *)(&i), sizeof(i)); fileBinary.write(reinterpret_cast(&i), sizeof(i)); fileBinary.close(); int getI; ifstream inputFileBinary("MyBinary.bin", ios_base::in | ios_base::binary); inputFileBina.. 파일 출력 스트림 std::ofstream #include ofstream 클래스의 객체는 filebuf 객체를 internal stream buffer로 유지하며 연결된 파일에대해 입출력 작업을 수행한다. = 버퍼를 가져와서 입출력 작업을 할 수 있다. 예시) #include // std::cin, std::cout #include // std::ifstream int main () { std::ofstream fout;// stream fout.open("GoodBye.txt");// open stream if (fout.is_open())// open 확인 { fout 파일 입력 스트림 파일 입력 std::ifstream #include 으로 포함한다. ifstream 클래스의 객체는 filebuf 객체를 internal stream buffer로 유지하며 연결된 파일에대해 입출력 작업을 수행한다. = 버퍼를 가져와서 입출력 작업을 할 수 있다. 간단 예제 hello.txt 내용 hello world hello world hello world #include #include int main() { std::ifstream fin;// 스트림 열기 fin.open("hello.txt");// 파일 open char c; if(fin.is_open()) // 파일 open 여부 확인 { while(fin.get(c))// 한 문자씩 가져오기 std::cout 파일 입출력 스트림 실제의 입력이나 출력이 표현된 데이터의 이상화된 흐름 운영체제에 의해 생성되는 가상의 연결고리 버퍼 스트림이 내부에 가지는 임시 메모리 공간 장점. 문자를 하나씩 전달하지 않고 묶어서 전달하므로 전송 시간이 적게 걸려 성능이 향상된다. 사용자가 잘못입력했을 경우 수정을 할 수 있다. 단점 게임과 같이 입출력이 빠르게 일어나야되는 프로그램은 버퍼가 오히려 안 좋은 영향을 끼칠 수 있다. 파일 입출력 클래스 파일 입력 스트림(ifstream): https://everydaystudy.tistory.com/23 파일 출력 스트림(ofstream): https://everydaystudy.tistory.com/24 출처: http://www.tcpschool.com/cpp/cpp_io_streamBuff.. String 클래스 std::String C++ STL에서 제공하는 문자열을 관리하는 클래스이다. 기존 C, C++에서 char 포인터를 이용해서 문자열을 관리하던 것을 포함하여 많은 일을 할 수 있다. 문자열의 길이를 동적으로 초기화, 변경, 가능하다. 문자열의 끝에 '널' 문자가 없다. Q. 과 둘 중 하나만 포함해도 되는가? A. 에 이 포함되어있다. 하지만 어떤 이유로든 을 지우게 될 수 있으니 을 포함하는 것은 좋은 습관이다. 생성자 (Constructors) // string constructor #include #include int main () { std::string s0 ("Initial string"); // constructors used in the same order as described abo.. 클래스와 구조체에 관한 고찰 in C++ 포인터와 참조자에 차이가 있음을 공부하고 나니 비슷한게 머리에 떠오르는게 클래스( class )와 구조체( structure )였다. 그래서 둘의 차이를 알아보고자 검색을 해본 결과 클래스는 기본 엑세스가 private 이다. 구조체는 기본 엑세스가 public 이다. 위 차이외 다른 차이는 없다고 한다. 출처: https://docs.microsoft.com/ko-kr/cpp/cpp/classes-and-structs-cpp?view=msvc-170 클래스 및 구조체(C++) 자세한 정보: 클래스 및 구조체(C++) docs.microsoft.com 포인터와 참조자에 관한 고찰 in C++ 참조자를 처음 공부할때 든 생각이 이거 참조자가 할 수 있는 일중에 포인터가 못하는게 있나? 였다. 하지만 처음 C언어를 공부할때 포인터를 보면서 이거 왜 배우는거지? 하다가 진도를 나가보니 포인터가 C언어의 꽃임을 알게되었기에 참조자를 공부하고도 점점 쓰다보면 알게 되겠지라고 넘겼다. 하지만 봐도봐도 포인터가 존재하는데 왜 굳이 참조자를 만든지 모르겠다. 다행히 나만이 아니라 대부분의 사람들의 의문이었던건지 한글로 검색해도 많은 정보를 얻을 수 있었다. 차이점 1. NULL 허용 여부 포인터는 NULL을 허용하지만 레퍼런스는 NULL을 허용하지 않는다. struct person { int birthday; }; struct person *peter = NULL; peter->birthday = 1220.. 이전 1 2 다음