분류 전체보기48 C++ 표준 라이브러리 / istream, ostream에 관한 이모저모 1. 상태 플래그 istream, ostream은 각각 입출력에 사용되는 스트림으로, cin, cout과 같은 형태로 사용할 수 있다. 해당 스트림들은 4개의 상태 플래그를 갖고 있는데, 각각 다음과 같다. goodbit: 스트림에 입출력 작업이 가능한 상황 badbit: 스트림에 복구 불가능한 오류 발생 시 failbit: 스트림에 복구 가능한 오류 발생 시 eofbit: 입력 작업 시에 EOF에 도달 시 만약 스트림의 상태 플래그가 goodbit가 아닌 경우 입출력 작업이 불가능한 상태라고 볼 수 있다. 예를 들어, cin을 활용해 타입이 맞지 않는 값을 입력하려고 시도하면 failbit가 켜져서 입출력 작업을 수행할 수 없게 된다. int a; cin >> a;// 만약 문자열, 문자를 입력한다면 .. 2023. 2. 13. 객체지향 3요소 객체지향 언어에는 캡슐화, 상속, 다형성 세 요소가 존재한다. 1. 캡슐화(Encapsulation) 캡슐화는 객체 내부에 있는 메서드, 속성 등을 외부에 숨기는 것이다. 즉, 정보 은닉을 의미한다. 객체가 외부로 공개할 정보는 Public으로 공개하고, 공개하지 않을 정보는 Private, Protected 등을 활용하여 숨긴다. 많은 객체지향 프로그래밍 언어에서 이는 Private, Protected, Public 등의 접근 제어 지시자로 정의되어 있다. class A { public: int getLength() { return len; } protected: int member; private: int len; } public한 요소에는 모두가 접근 가능, protected한 요소에는 해당 요소를.. 2023. 2. 13. C++ 문법 / 정적 메서드와 정적 멤버 변수(static) 정적 메서드는 객체 그 자신(this 포인터)에 접근할 수 없다. 즉, 그 객체 인스턴스와는 독립적으로 존재하는 메서드라고 할 수 있다. class A { public: A() { total_data_number++; } ~A() { total_data_number--; } static int getTotalDataNumber() { return total_data_number; }; private: static int total_data_number = 0; } 위 소스코드에 정의된 static 메서드 getTotalDataNumber()은 인스턴스가 없이도 접근할 수 있다. A::getTotalDataNumber(); 또한 위 소스 코드에 정의되어 있는 정적 멤버 변수 total_data_number.. 2023. 2. 12. C++ / Deep Copy와 Shallow Copy 1. Shallow Copy Shallow Copy는 직역하자면 얕은 복사라고 할 수 있다. 얕은 복사라는 이름에 걸맞게 Shallow Copy는 객체를 완벽하게 복사하는 것이 아니라 객체가 가리키는 포인터만을 복사해 주는 방식이라고 할 수 있다. 예를 들어 객체 A를 B에 Shallow Copy하면 B에는 새로운 메모리 공간이 할당되고 거기에 객체 A를 복사하는 것이 아니라, 객체 A의 포인터를 B에 저장하는 식으로 복사를 수행한다. C++에서 기본 복사 생성자는 바로 이 Shallow Copy를 수행한다. 코드로 보자면 다음과 같다. class A { public: A(char* str); ~A() { delete[] str; } private: char* str; int len; } A::A(cha.. 2023. 2. 12. 이전 1 ··· 5 6 7 8 9 10 11 12 다음