목록Categories (1103)
KoreanFoodie's Study

모두의 코드를 참고하여 핵심 내용을 간추리고 있습니다. 자세한 내용은 모두의 코드의 씹어먹는 C++ 강좌를 참고해 주세요! explicit 키워드 explicit 키워드는, 간단히 말해 암시적 형 변환을 허용하지 않을 때 붙여주는 키워드이다. 예를 들어, 이전에 만들었던 MyString 클래스에 다음과 같은 생성자와 함수를 추가한다고 가정해 보자. MyString::MyString(int capacity) { string_length = 0; string_content = new char[capacity]; memory_capacity = capacity; } void MyString::DoSomething(MyString s) {}; 만약, explicit이 없다면, 다음과 같은 호출은 정상적으로 작동..
들어봐. 내가 노래를 들으며 에스컬레이터를 천천히 내려가고 있었는데 말야. 내려가다 보니 스쳐 지나치는 사람들도 역시 나와 같은 에어팟 프로를 갖고 있더라고. 근데 그 중 한 분이 에어팟 프로를 떨어뜨린거야. 케이스를 닫다가. 어쩌긴 어째, 친절함이 모토인 내가 못 본척 할 수 없었지. 그래서 마치 카드 마술을 하듯 과장된 손짓으로 튕겨 나가는 에어 팟을 하나, 둘 집어 그분에게 건내주었어. 깜짝 놀라 청설모처럼 눈을 똥그랗게 뜬 그분은 에어팟 한쪽을 어색하게 들고 있었지. 마침 나는 에어팟을 끼고 있었기에, 왼쪽 콩나물을 잠시 빼어들고 그분의 에어팟에 가볍게 부딪혔어. Cheers. 에어팟 건배와 함께 나는 나지막이 그런 문구를 내뱉고 유유히 그 자리를 빠져나왔어. 아마 모르긴 몰라도, 그 분에게는 평..

모두의 코드를 참고하여 핵심 내용을 간추리고 있습니다. 자세한 내용은 모두의 코드의 씹어먹는 C++ 강좌를 참고해 주세요! 문자열 클래스 기존 C언어에서는 문자열의 마지막에 널 값('\0')을 삽입했다. C++에서는 표준 라이브러리로 string 클래스를 제공하고 있으므로, char* 대신 string을 사용하자! 직접 String Class를 만들어 보는 것은 좋은 연습이 된다. 필요 명세는 다음과 같다. 변수 : 문자열 길이, 문자열 내용, 사용하는 메모리 크기 메소드 : 생성자, 소멸자, insert, erase, find, reserve, assign, compare 더보기에 예제 코드를 넣어 놓았다. 더보기 모두의 코드에서 제시한 MyString 클래스 코드 예시 : #include // str..
사람들은 전부 조금씩 다른 옷을 입고 있다. 오늘도 수많은 행자들은 남들과 다른 천쪼가리를 갖기 위해 백화점을 걷고 또 걷는다. 뒤적거린다. 사막에서 바늘을 찾듯이, 끝없는 탐구심은 멈출 줄을 모른다. 지치지도 않나 보다. 왜 모든 사람들은 남들과 다르게 입으려 하는 걸까. 같으면서도 조금 다르게. 비슷하면서도 특색있게. 왜일까. 모두가 꿈꾸는 똑같은 얼굴을 갖기 위해 분주하면서, 옷에는 왜. 강남언니가 되기 위해 따라쟁이라는 오명도 감수하면서 왜. 똑같은 눈, 똑같은 코, 똑같은 입을 갖길 바라는 사람들. 하지만 유독 옷에는 너그럽지 못한 사람들. 관대함을 경험하지 못한, 불쌍한 옷들에게 심심한 위로를 건내고 싶은 날이다. 선택받지 못한 피조물에게 축복을. 다음 생에는 누군가의 옷장에 걸려 있기를.

모두의 코드를 참고하여 핵심 내용을 간추리고 있습니다. 자세한 내용은 모두의 코드의 씹어먹는 C++ 강좌를 참고해 주세요! 생성자의 초기화 리스트(initializer list) 간단한 예시 코드를 보자. class Test { int a; int b; Test(); } Test::Test() : a(1), b(2) {} 위의 예시에서, (생성자 이름) : var1(arg1), var2(arg2) ... 같은 형식을 써 주면, 생성자 호출과 동시에 멤버 변수들을 초기화해줄 수 있다. "동시에"라는 개념이 중요하다. 초기화 리스트를 사용하지 않으면 생성을 먼저 하고 그 다음에 대입을 수행하게 된다. 따라서, 초기화 리스트는 int a = 10; 와 같고, 일반 버전의 생성자는 int a; a = 10; 처..

모두의 코드를 참고하여 핵심 내용을 간추리고 있습니다. 자세한 내용은 모두의 코드의 씹어먹는 C++ 강좌를 참고해 주세요! 소멸자 클래스 생성자에서 만들어 준 자원은 객체가 소멸할 때 반드시 해제되어야 메모리 누수(memory leak)이 일어나지 않는다. #include class Marine { char* name; public: Marine(); Marine(const char* marine_name); ~Marine(); }; Marine::Marine() { name = NULL; } Marine::Marine(const char* marine_name) { name = new char[strlen(marine_name) + 1]; strcpy(name, marine_name); } Marine..

함수의 오버로딩 (function overloading) 함수의 오버로딩은, 인자로 들어오는 변수의 타입에 따라 이름이 같은 함수들 중 적합한 함수를 호출해 주는 것을 의미한다. 이때, 인자를 찾는 과정은 다음과 같다. 1 단계 : 자신과 타입이 일치하는 함수를 찾는다. 2단계 : 정확히 일치하는 타입이 없는 경우, 아래와 같은 형변환을 통해 일치하는 함수를 찾는다. Char, unsigned char, short 는 int로 변환된다. Unsinged Short는 int의 크기에 따라 int 혹은 unsigned int로 변환된다. Float는 double로 변환된다. Enum은 int로 변환된다. 3단계 : 위와 같이 변환해도 일치하는 것이 없다면 아래의 좀 더 포괄적인 형변환이 일어난다. 임의의 숫..

객체란? 객체는 인스턴스 변수(instance variable)과 인스턴스 메소드(instance method)로 이루어져 있다. 클래스 클래스는 객체를 찍어내는 '설계도'이다. 클래스 내부의 변수와 함수를 각각 멤버 변수(member variable)과 멤버 함수(member function)이라고 부른다. 멤버 변수와 함수는 접근 지정자를 설정할 수 있다. public : 외부에서 접근 가능 protected : 상속된 클래스만 접근 가능 private : 외부에서 접근 불가능 사실 C++에서 클래스와 구조체의 유일한 차이는 바로 접근 지정자에 있다!

new와 delete c에 malloc과 calloc이 있다면, C++에는 new와 delete가 있다. int* p = new int; *p = 10; delete p; 만약 지역변수를 delete로 해제하려 한다면 Heap이 아닌 공간을 해제하려 한다는 경고 메시지가 나타난다. 컴파일러는 변수를 가까운 곳에서 찾는다. int a = 4; { std::cout

참조자 (레퍼런스) 레퍼런스(reference)는 & 기호를 이용해서 표기한다. #include int main() { int a = 3; int& another_a = a; } 참조자는 별명, 즉 또다른 이름이다. 레퍼런스는 반드시 정의 시 누구의 별명이 될 것인지 지정해야 한다. 또한, 레퍼런스가 한 번 별명이 되면 절대로 다른 이의 별명이 될 수 없다! int a = 10; int& another_a = a; int b = 3; another_a = b; 제일 마지막 줄은, 실제로 "a=b"와 같은 의미를 지닌다. 또한, 레퍼런스는 메모리 공간 속에 존재하지 않을 수도 있다. 이는 레퍼런스를 위해 새로운 공간을 할당할 필요가 없을 수도 있다는 것이다. 참조자의 참조자? int a = 1; int& ..