목록Development/C & C++ (45)
컴공생의 다이어리
fstream 파일 스트림은 기본적인 istream이나 ostream 클래스 보다 더 지원하는 기능이 더 많기 때문에 이를 상속 받아서 작성되었으며, 각각을 상속 받은 것이 ifstream과 ofstream이다. 이들 클래스를 모두 포함하는 라이브러리로 fstream을 사용하면 된다. #include #include #include int main() { // 파일 읽기 준비 std::ifstream in("test.txt"); std::string s; if (in.is_open()) { in >> s; std::cout
ios_base 클래스에서, 스트림의 입출력 형식을 바꿀 수 있다. 예를 들어서 일반적으로 수를 입력하면 10진수로 처리되었지만, 이번에는 16진수로 처리할 수 있는 방법은 아래와 같다. #include #include int main() { int t; while (true) { std::cin.setf(std::ios_base::hex, std::ios_base::basefield); std::cin >> t; std::cout
아래와 같은 코드를 실행하면 t를 int가 아닌 문자를 입력받는다면 cin에 fail비트가 켜진 상태이므로, 플래그를 초기화하지 않는 이상 cin을 이용하여 입력을 받을 수 없다(문자열 s를 입력받지 못함). #include #include int main() { int t; std::cin >> t; // 고의적으로 문자를 입력하면 failbit 가 켜진다 std::cout s; } 따라서 이를 해결하려면 아래와 같이 코드를 작성해야 한다. #include #include int main() { int t; while (true) { std::cin >> t; std::cout
.assign : 문자열을 할당하는 함수 (문자열) : 문자열을 할당 (개수, 문자) : 문자를 개수만큼 할당 (문자열, 시작위치, 개수) : 매개변수 문자열의 시작위치부터 개수만큼을 호출한 문자열에 할당 string s1,s2,s3; s1.assign("ABCDEFG");//s1="ABCDEFG" s2.assign(3,'a');//s2="aaa" s3.assign(s1,2,4);//s3="CDEF" (문자열 s1의 2부터 4개를 복사하여 할당) .append : +연산자의 역할처럼 문자열을 끝에 더한다. (문자열) : 문자열을 더한다 (개수, 문자) : 문자를 개수만큼 끝에 더한다 (문자열, 시작위치, 개수) : 매개변수 문자열의 시작위치부터 개수만큼을 호출한 문자열 뒤에 더한다 string s1,s2..
C++ 에서는 변수들의 값을 바꾸지 않고 읽기만 하는, 마치 상수 같이 C++ 에서는 변수들의 값을 바꾸지 않고 읽기 만 하는, 마치 상수 같은멤버 함수를 ’상수 함수’ 로써 선언할 수 있다. const 함수의 정의는 아래와 같다. (기존의 함수의 정의) const; //example int attack() const; int TEST::attack() const{ return default_damage; } 이렇게 선언하면 attack함수는 상수 멤버 함수로 정의된 것이다. 상수 함수로 attack함수를 정의함으로써, 이 함수는 다른 변수의 값을 바꾸지 않는 함수라고 명시 시킬 수 있다. 당연하게도, 상수 함수 내에서는 객체들의 '읽기' 만이 수행되며, 상수 함수 내에서 호출할 수 있는 함수로는 다른 ..
클래스에 아래와 같은 함수들이 있다고 하면 access_x는 x의 레퍼런스를 리턴하게 되고, get_x는 x의 값을 리턴한다. int& access_x() { return x; } int get_x() { return x; } modoocode.com/312 씹어먹는 C++ 강좌 - PDF 파일 modoocode.com
생성된 총 클래스의 객체의 수를 세기 위한 방법에는 2가지가 있다. 첫번째는 어떠한 배열에 객체를 보관해놓고, 생성된 객체의 수를 모두 세는 것이다. 두번째는 어떤 변수를 만들어서 객체 생성시에 1을 더하고, 소멸시에 1을 빼는 것이다. 첫번째 방법의 경우 vector라는 자료를 사용하면 쉽게 할 수 있다. 두번째의 경우 전역 변수를 사용하거나 static 멤버 변수를 사용해 해결할 수 있다. 어떤 변수를 만들어서 객체 생성시에 1을 더하고, 소멸시에 1을 빼는 것을 전역 변수를 통해 관리하면, 프로젝트의 크기가 커질 수록 프로그래머의 실수로 인해 서로 겹쳐서 오류가 날 가능성이 다분하다. 따라서 전역 변수 같지만 클래스 하나에만 종속되는 변수인 static 멤버변수를 사용하는 것이 좋다. static ..
C++에는 C에서 쓸 수 없는 함수의 오버로딩이 가능하다. c언어에서는 하나의 이름을 가지는 함수는 딱 1개만 존재할 수 있다. 하지만 c++에서는 같은 이름을 가진 함수가 여러개 존재할 수 있다. 아래과 같이 같은 이름의 함수를 호출했을 때 함수를 어떻게 해서 구분을 할까? 그 방법은 바로 함수를 호출 하였을 때 사용하는 인자를 보고 결정하는 것이다. #include void print(int x) { std::cout
객체란, 변수들과 참고 자료들로 이루어진 소프트웨어 덩어리이다. 이 때 객체가 현실 세계에서의 존재하는 것들을 나타내기 위해서는 추상화(abstraction)라는 과정이 필요하다. 클래스란, 쉽게 말하면 객체의 '설계도'라고 할 수 있다. https://blog.hexabrain.net/167 C++ 강좌 7편. 클래스(class) 1. 클래스(class) 클래스란 무엇일까요? 다른 언어를 공부하시다가 '클래스(class)'라는 말을 들어보신 분도, 그렇지 않은 분도 계실겁니다. C++의 클래스는, 쉽게 말하자면 C의 구조체에서 확장된 C++ blog.hexabrain.net
C 언어에서는 malloc 과 free 함수를 지원하여 힙 상에서의 메모리 할당을 지원했다. C++에서도 마찬가지로 malloc 과 free 함수를 사용할 수 있다. 하지만 언어 차원에서 지원하는 것으로 바로 new 와 delete 라고 할 수 있다. new 는 말 그대로 malloc 과 대응되는 것으로 메모리를 할당하고 delete 는 free 에 대응되는 것으로 메모리를 해제한다. /* new 와 delete 의 사용 */ int main() { int *p = new int; *p = 10; std::cout > list[i]; } for (int i = 0; i < size; i++) { std::cout