C++) 함수 템플릿
함수 템플릿 함수 다중 정의(Overloading)를 대체할 수 있는 문법으로, 함수를 만드는 틀 역할을 한다. 즉 코드를 만드는 코드인 셈이다. #include template // 함수 템플릿 선언 T add(T a, T b) { return a + b; } int main() { std::cout
함수 템플릿 함수 다중 정의(Overloading)를 대체할 수 있는 문법으로, 함수를 만드는 틀 역할을 한다. 즉 코드를 만드는 코드인 셈이다. #include template // 함수 템플릿 선언 T add(T a, T b) { return a + b; } int main() { std::cout
함수 다중 정의(Overloading) 다중 정의는 영문 Overloading에 대한 한글 번역 표기이다. 함수의 이름은 같지만 매개변수 구성이 다른 점이 특징이다. (반환 형식, 호출 규칙은 오버로딩 대상이 아니다.) 디폴트 매개변수와 조합시 모호한 호출이라는 오류가 발생한다. #include int add(int a, int b) { std::cout
범위 기반 for문 C++에서의 배열은 C의 배열보다 유지보수하기 편하다. 범위 기반 for 덕분이다. C++에서 범위 기반 for문은 배열 요소의 갯수만큼 반복횟수가 자동으로 결정되며, 배열 요소의 갯수가 달라져도 반복문을 수정할 필요가 없다. (C에서는 이 작업으로 상당히 고생이 많다고 한다.) 단 컴파일러가 반복횟수를 판단할 수 있어야 사용이 가능하다. int main() { // 범위 기반 for문 int list[] = { 10, 20, 30, 40, 50, 60 }; for (int i = 0; i < 5; i++) std::cout
임시 객체 int a(10), b(5), c = a + b; 각각 a, b, c 인스턴스가 있다. 그 중 c 인스턴스는 a 와 b를 더한 값이다. a와 b를 더하는 과정에서 생성되는 인스턴스(값)는 c에 대입된 후 증발될 것이다. 즉, 임시 객체는 이름을 갖지 않으며 본인의 역할을 다 한 뒤 소멸된다. r-value 참조 a + b는 c라는 l-value에 할당되는 r-value라고 할 수 있다. 즉 임시객체는 r-value이다. r-value는 자신의 역할을 다 하면 소멸되지만, 굳이 r-value에 참조를 걸어 변수로 만들어 줄 수도 있다. 선언하는 방법은 자료형&& 식별자 = 임시객체 이다. #include int testFunc(int param) { int result = param * 2; r..
참조형 참조형은 특정 인스턴스의 주소를 참조하는 자료형이라고 할 수 있다. C의 포인터와 비슷하다. 특이한 점은 선언과 동시에 초기화를 해야하며, 이후 값을 변경할 수 없다는 것이다. 참조형이 메모리에서 직접 참조중인 데이터는 변경이 가능하겠지만, 참조형 자체가 가진 메모리 주소값은 변경이 안된다. (참조 메모리가 불변이라는 점에서 진정한 의미의 Call by reference라고 할 수 있다.) int main() { int data(10); // 참조형 int& ref = data; ref = 20; std::cout
C++의 메모리 동적 할당은 C의 그것에 비해 훨씬 간편하다 C의 경우 malloc 함수를 호출할 때 매개변수로 메모리의 크기부터 형까지 모든 것들을 C에 알려주었어야 했는데, C++에서는 단순히 new 연산자를 이용해 메모리를 동적 할당하고, delete 연산자로 메모리 할당을 해제하면 된다. 아래 코드를 보자 개별 인스턴스의 new, delete 연산자 int main(void) { int* pData = new int; int* pNewData = new int(10); *pData = 1000; std::cout
C++ 변수 선언 및 정의 C에서는 변수 정의를 아래와 같이 했다. int a = 10; C++도 C 문법을 호환하기에 위처럼 변수를 선언하고 정의할 수 있다. 그러나 C++에서 주로 사용하는 변수 선언 및 정의는 아래 코드처럼 한다. int main() { int a(10); int b(a + 5); auto c(b + 5); std::cout
리다이렉션 연산자 (>>) >> 기호는 명령의 출력을 파일에 추가하는데 사용된다. 예를 들어 dir >> test.txt 라는 명령을 실행하면 dir 명령의 결과가 test.txt라는 파일에 추가되는 형식이다. 이런것이다. 이 기호는 C++에서도 엇비슷하게 동작한다. std::cout (콘솔 출력) 기본 입출력을 한번 더 해보자. int main() { std::cout
시작하기에 앞서 이걸 왜 하고 있는가? 자바스크립트로만 구현해봤던 자료구조들을 C언어를 이용해서도 구현해보고 싶었다. 메모리단까지 까집어볼 수 있다면 왠지 간지날 것 같아서이다. 지금 하는 이 공부가 현재 내가 하고 있는 프론트엔드 개발에 직접적인 도움을 주지는 않겠지만, 개발에 필요한 사고의 폭과 넓이를 확장시켜줄 수 있지 않을까 생각한다. C를 공부하며 느낀 좋은 점은 절차적인 개발 능력이 향상되는 것 같은 느낌이 든다는 것(?)이다. 메모리의 지역변수와 스택을 고려해볼 수 있게 되었고, 힙에 동적으로 메모리 할당을 하고, 할당한 메모리를 해제해보면서 뭐랄까... 역시 그냥 돌아가는 것은 없구나. 라는 것을 새삼 체감하게 된다. 아무튼 아직도 배워가고 있다. 컴퓨터란 것을... 기초라는 것을... ...