기타: 123개의 글
[C++] 연산자 오버로딩 정의 (operator) C++ 에서 클래스는 operator 를 사용하여 연산자를 오버로딩해 재정의 할 수 있다. 재정의된 연산자를 사용하여 클래스 끼리의 연산을 할 수 있다. * operator+() : 덧셈 연산자로, 해당 메소드를 오버라이딩 하면 클래스끼리 + 연산시에 동작한다. * operator++() : 단항 연산자 오버로딩, ++ 와 같은 단항 연산자를 오버로딩한다. operator++() : 전위 연산, operator++(int) : 후위 연산 #include using namespace std; class Point{ int x; int y; public: Point(int _x = 0, int _y = 0) :x(_x), y(_y){ } void print..
[C++] 파일 쓰기 예제 ofstream C++ 에서 파일 쓰기는 의 ofstream을 사용한다. DocWriter.cpp 의 Writer() 함수를 참고. main 함수를 실행하면, test.txt 파일이 생성되고 파일에 내용이 쓰여져 있다. 1. DocWriter.h #pragma once #include using namespace std; class DocWriter { public: DocWriter(); DocWriter(const string& fileName, const string& content); ~DocWriter(); void setFileName(const string& fileName); void setContent(const string& content); void Writ..
[C++] LinkedList 구현하기 예제 마지막 노드가 next 로 다시 head를 가리키도록 환형 구조로 작성했다. 노드나 리스트를 삭제할 때 delete 하여 메모리를 해제해줘야 한다. #include struct Node{ Node* prev; Node* next; void* data; }; struct List{ Node* head; }; List* createList(){ Node* head = new Node; head->prev = head; head->next = head; head->data = 0; List* list = new List; list->head = head; return list; } void insertNodeAfter(Node* node, void* data){ N..
[C++] 왜 포인터는 하나의 타입밖에 가리킬 수 없는가? 포인터는 어떠한 변수를 가리키는 주소값을 가진 변수이다. 그렇다면 데이터를 가지고 있는 것도 아니고 주소값을 가지고 있는 것인데, 왜 한가지 타입밖에 가리킬 수 없을까? 하나의 포인터로 다양한 타입을 가리킬 수 있으면 더 자유롭게 사용할 수 있을텐데.. 그것은 포인터가 가리키고 있는 변수의 타입을 알 수 없기 때문이다. 변수의 타입을 알 수 없으면, 포인터가 가리키는 변수의 값을 가져올 때 몇 바이트인지 알 수가 없다. 따라서 포인터가 가리키는 변수의 타입을 알기 위하여, 포인터 변수는 타입이 지정되어 있으며, 해당 타입의 변수만 가리킬 수 있다. 예외적으로 void* 포인터는 모든 타입을 가리킬 수 있다.하지만 지금 가리키고 있는 변수가 어떤 ..
[C++] 비트 연산과 쉬프트 (>>,
[C++] 문자열 입력 getline()과 버퍼오버플로우 문자열을 입력받을 때, cin >> 을 보통 사용한다. 하지만 cin 으로 문자열을 입력받을 때 문제점들이 있다. (1) 버퍼 오버플로우 cin으로 입력받는 배열의 크기를 넘어서는 문자열을 cin 을 통해 입력받으면, 배열의 크기를 넘어 다른 변수 소유의 메모리에 덮어쓰게 된다.이것은 의도하지 않은 변경을 발생시키며, 심각한 문제를 일으킬 수 있다.이것을 버퍼 오버 플로우 라고 한다. (2) cin을 사용한 연속된 문자열 입력시 공백 처리 cin 을 연속으로 사용하여 2번의 문자열을 받을 때 공백을 만나면 다음 cin의 변수로 데이터가 넘어간다.예를들어, I'm Hyeon 을 입력하면, I'm 은 첫번째 변수에 Hyeon은 두번째 변수에 들어간다...
[C++] string 문자열을 배열에 복사하기 string 은 c++에서 사용하는 문자열 클래스이다.c 로 개발된 인터페이스를 사용할 때, 문자열 배열과 혼용해서 사용해야 한다. 문자열 배열의 값을 string으로 복사할 수도 있고, string 을 문자열 배열로 복사할 수도 있다. 문자열 배열을 string으로 복사하는 거는 쉽다. 그냥 "=" 을 사용하면, string 으로 복사된다. 하지만 string을 문자열 배열에 복사할 때는 조금 복잡한 과정을 거친다. 아래는 그 예제이다.#include #include #include using namespace std; int main(){ string cppstyle = "My name is Hyeon"; char* cstyle = new char[cp..
[C++] 문자열 합치기 strcat(), 문자열 비교 strcmp() strcat(A, B) : A 문자열 뒤에 B 문자열을 결합한다.strcmp(A, B) : A 문자열과 B 문자열의 일치를 비교한다. 두 문자열이 일치하면 0을 반환한다. #include #include using namespace std; int main(){ char str1[20] = "abcde"; char str2[] = "fghij"; strcat_s(str1, str2); if (strcmp(str1, "abcdefghij") == 0) cout
[C++] 문자열 길이 strlen(), 문자열 복사 strcpy() strlen(A) : 문자열 배열 A의 길이를 구하는 함수 strcpy(A, B) : 문자열 B를 A에 복사한다. #include #include using namespace std; int main(){ char src[] = "Hyeon"; int len = strlen(src); char* dest = new char[len + 1]; strcpy(dest, src); cout