목록Categories (1110)
KoreanFoodie's Study
모두의 코드를 참고하여 핵심 내용을 간추리고 있습니다. 자세한 내용은 모두의 코드의 씹어먹는 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& ..
이름 공간 (namespace) namespace는 정의된 객체가 어디 소속인지를 지정해준다. #include "header1.h" #include "header2.h" int main() { header1::foo(); header2::foo(); } 위의 예시처럼, header1과 header2에 같은 이름의 함수 foo( )가 정의되어 있더라도 namespace를 사용하면 구분해서 사용할 수 있다. 또한, "using namespace std;"와 같은 방식은 추천하지 않는다. std에는 수많은 함수들이 포함되어 있기 때문에, 충돌이 일어날 수 있기 때문이다. 이름 없는 이름 공간 이름 없는 이름 공간을 설정할 경우, 정의된 것들은 해당 파일 안에서만 접근할 수 있게 된다. 이 경우 마치 stati..
가치란 무엇인가. 무엇을 가치있다고 정의할 수 있을까. 비트코인이 처음 열풍이 불었을 때를 생생히 기억한다. 무엇이 가치 있길래 사람들은 데이터 쪼가리에 그리도 열광하는 것인가. 나 또한 비트코인 기술서적을 읽으며, 실제 투자도 하고 글도 쓰며 스타트업에도 기웃거렸다. 너무나도 궁금했기에. 당췌 그게 무엇이길래 그리도 가치가 있다고 하는지 알아야겠다고 생각했었다. 하지만 아무리 기술이 훌륭하다 한들, 결국 가치는 인간이 정하는 것이었다. 상호간의 합의, '이것은 가치가 있는 것이다'라는 공통의 신뢰가 무에서 유를 창출해내고 있었다. 출퇴근길을 책임지는 버스 유리창에는, 오늘도 명품 세일을 홍보하는 스티커가 덕지덕지 붙어있다. 명품은 정말로 가치가 있는 것일까. 억 소리가 나는 돈을 지불할 정도의 값어치가..
