C, C++

C, C++

C++) 함수 템플릿

함수 템플릿 함수 다중 정의(Overloading)를 대체할 수 있는 문법으로, 함수를 만드는 틀 역할을 한다. 즉 코드를 만드는 코드인 셈이다. #include template // 함수 템플릿 선언 T add(T a, T b) { return a + b; } int main() { std::cout

C, C++

C++) 함수 다중 정의(Overloading)

함수 다중 정의(Overloading) 다중 정의는 영문 Overloading에 대한 한글 번역 표기이다. 함수의 이름은 같지만 매개변수 구성이 다른 점이 특징이다. (반환 형식, 호출 규칙은 오버로딩 대상이 아니다.) 디폴트 매개변수와 조합시 모호한 호출이라는 오류가 발생한다. #include int add(int a, int b) { std::cout

C, C++

C++) 범위 기반 for문

범위 기반 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

C, C++

C++) 임시 객체와 r-value 참조

임시 객체 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, C++

C++) 참조형 (변하지 않는 포인터)

참조형 참조형은 특정 인스턴스의 주소를 참조하는 자료형이라고 할 수 있다. C의 포인터와 비슷하다. 특이한 점은 선언과 동시에 초기화를 해야하며, 이후 값을 변경할 수 없다는 것이다. 참조형이 메모리에서 직접 참조중인 데이터는 변경이 가능하겠지만, 참조형 자체가 가진 메모리 주소값은 변경이 안된다. (참조 메모리가 불변이라는 점에서 진정한 의미의 Call by reference라고 할 수 있다.) int main() { int data(10); // 참조형 int& ref = data; ref = 20; std::cout

C, C++

C++) 메모리 동적 할당

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++

C++) 변수 선언 및 정의

C++ 변수 선언 및 정의 C에서는 변수 정의를 아래와 같이 했다. int a = 10; C++도 C 문법을 호환하기에 위처럼 변수를 선언하고 정의할 수 있다. 그러나 C++에서 주로 사용하는 변수 선언 및 정의는 아래 코드처럼 한다. int main() { int a(10); int b(a + 5); auto c(b + 5); std::cout

C, C++

C++) 리다이렉션 연산자 및 std::cout (콘솔 출력)

리다이렉션 연산자 (>>) >> 기호는 명령의 출력을 파일에 추가하는데 사용된다. 예를 들어 dir >> test.txt 라는 명령을 실행하면 dir 명령의 결과가 test.txt라는 파일에 추가되는 형식이다. 이런것이다. 이 기호는 C++에서도 엇비슷하게 동작한다. std::cout (콘솔 출력) 기본 입출력을 한번 더 해보자. int main() { std::cout

C, C++

C++) Hello world

안녕 C++ 헬로~ #include int main(void) { std::cout

C, C++

C) 싱글 링크드 리스트 구현 + 메모리 추적

시작하기에 앞서 이걸 왜 하고 있는가? 자바스크립트로만 구현해봤던 자료구조들을 C언어를 이용해서도 구현해보고 싶었다. 메모리단까지 까집어볼 수 있다면 왠지 간지날 것 같아서이다. 지금 하는 이 공부가 현재 내가 하고 있는 프론트엔드 개발에 직접적인 도움을 주지는 않겠지만, 개발에 필요한 사고의 폭과 넓이를 확장시켜줄 수 있지 않을까 생각한다. C를 공부하며 느낀 좋은 점은 절차적인 개발 능력이 향상되는 것 같은 느낌이 든다는 것(?)이다. 메모리의 지역변수와 스택을 고려해볼 수 있게 되었고, 힙에 동적으로 메모리 할당을 하고, 할당한 메모리를 해제해보면서 뭐랄까... 역시 그냥 돌아가는 것은 없구나. 라는 것을 새삼 체감하게 된다. 아무튼 아직도 배워가고 있다. 컴퓨터란 것을... 기초라는 것을... ...

2DC
'C, C++' 카테고리의 글 목록 (2 Page)