전체 글 480

임시 변수, 참조 매개변수, const

C++는 실제 매개변수와 참조 매개변수가 일치하지 않을 때 임시 변수를 생성할 수 있다. 최근의 C++는 매개변수가 const 참조일 경우에만 이것을 허용한다. 이것은 새로운 제약이다. C++가 어떤 경우에 임시 변수를 생성하는지, 그리고 const 참조의 경우에만 임시 변수 생성을 허용하는 이유를 알아보자. 먽, 임시 변수는 언제 생성되는 것일까? 참조 매개변수가 const일 경우, 컴파일러는 다음과 같은 두 가지 상황에서 임시 변수를 생성한다. // 일반 매개변수와 참조 매개변수의 예시 double cube(double a); double refcube(double& ra); 임시 변수란? - 실제 매개변수와 참조 매개변수간에 데이터형이 일치하지 않을 경우 생성되는 변수이다. - const 참조 데이..

가변배열 동적할당 vector

vector 템플릿 클래스는 동적 배열에 속하는 string 클래스와 유사하다. 프로그램이 실행되는 동안 vector 객체의 크기를 세팅할 수 있고(=동적할당), 새로운 데이터를 마지막에 추가하거나 중간에 데이터를 삽입할 수도 있다(=동적할당). 기본적으로 동적 배열을 생성하기 위해 new를 사용하는 것을 대체할 수 있다. 실제로 vector 클래스는 메모리를 관리하기 위해서 new와 delete를 사용하지만, 그 과정은 자동으로 진행된다. 템플릿 클래스를 의미하는 내용에 대해서 너무 깊은 내용을 다루지는 않겠지만, 몇 가지 기본적이고 실질적인 문제를 살펴보도록 하겠다. 첫째, vector객체를 사용하기 위해서는 vector 헤더 파일을 포함해야 한다. 둘째, vector식별자는 std 이름 공간의 일부..

new 동적 할당 delete와 nullptr의 이용

new 동적 할당 방법 typeName * pointer_name = new typeName; typeName = 자료형 delete 예시 1) int * ps = new int; delete ps; 예시 2) int *ps = new int; int *pq = ps; delete pq; delete도 포인터와 같이 ps나 pd가 가진 주소의 값(변수값)을 타고 들어가 지운다. ps = &new ps = pq = &new nullptr의 예시 ps = nullptr pq = nullptr 이유는 포인터가 가지고 있던 주소 값은 바뀌지 않기 때문에 가리키던 주소를 초기화 해주는 것이다. 생성자와 new 그리고 delete 생성자에서 new를 사용하여 메모리를 대입했을 때에는, 대응하는 파괴자에서 delet..

c++ 배열

초기화 형식은 배열을 정의하는 곳에서만 사용할 수 있다. 초기화를 나중에 할 수는 없다. 배열을 다른 배열에 통째로 대입할 수 도 없다. 그러나 인덱스를 사용하여 배열 원소에 개별적으로 값을 대입하는 것은 언제든지 가능하다. 배열을 초기화할 때, 초기화 값의 개수를 배열 원소의 개수보다 모자라게 제공할 수도 있다. 예를 들어 다음과 같은 구문은 hoteltips 배열의 처음 두 개의 원소만 초기화한다. float hotelTips[5] = {5.0, 2.5} 배열을 부분적으로 초기화하면, 컴파일러가 나머지 원소들을 모두 0으로 설정한다. 따라서 배열의 모든 원소를 0으로 초기화하는 일은 매우 쉽다. 명시적으로 첫 번째 원소만 0으로 초기화하면 된다. 그러면 컴파일러가 나머지 원소들을 모두 0으로 초기화시..

카테고리 없음 2023.01.15

c++ 함수 구문

C++ 프로그램은 함수라고 부르는 하나 또는 그 이상의 모듈들로 이루어진다. 프로그램은 main ( ) 이라는 함수부터 실행이 시작된다. 그러므로 어떤 프로그램이든지 간에 main ( ) 함수가 반드시 하나 있어야 한다. 함수는 함수 머리와 함수 몸체로 이루어진다. 함수 머리는 그 함수가 (리턴값이 있을 경우) 어떤 데이터형의 값을 리턴하고, 어떤 종류의 정보를 매개변수로 받는지를 나타낸다. 함수 몸체는 중괄호 { } 로 둘러싸인 C++ 구문들로 이루어진다. C++ 구문들의 유형은 다음과 같다. 선언 구문 선언 구문 (declaration statement) : 함수에서 사용되는 변수의 이름과 데이터형을 선언한다. 대입 구문 대입 구문 (assignment statement) : 대입 연산자 (=)를 사..

main 함수의 머리

함수의 머리는 인터페이스 역할을 한다. main 함수의 정의는 함수의 머리 int main()로부터 시작한다. 일반적으로 함수는 다른 함수에 의해 호출이 된다. 이때 함수 머리는 호출 함수와 피호출 함수의 인터페이스를 나타낸다. 함수 이림의 앞부분을 함수 리턴형(function return type)이라고 한다. 이것은 피호출 함수가 호출 함수로 다시 넘겨주는 정보의 흐름을 나타낸다. 이러한 일반 규칙이 main() 함수에서는 다소 혼동이 된다. 그 이유는 프로그램의 어디에도 main() 함수를 호출하는 부분이 없기 때문이다. 일반적으로 main()은, 프로그램과 운영 체제 (Unix, Windows 7,Linux 또는 다른 어떤 것)을 중개하기 위해 컴파일러가 프로그램에 추가하는 시동 코드에 의해 호출..

인라인 함수

inline 함수라는 이름의 의미는 in은 내부, line은 프로그램 코드라인을 의미한다. 프로그램 코드라인 안으로 들어가 버린 함수라는 뜻으로 일반적인 함수에 비해서 실행속도의 이점이 있다. 이유는 함수의 호출 방식에 대한 차이 때문이다. 일반 함수를 호출하는 경우 메모리에 일반 함수의 코드를 저장하고, 함수를 호출했을 때 해당 함수의 주소로 점프하여 해당 함수의 코드를 실행하고 다시 원래 자리로 돌아와야 한다. 그에 반해 인라인 함수는 함수 호출 코드에 직접 인라인 함수의 코드가 치환되어 실행되기 때문에 주소영역 점프가 필요하지 않아 함수의 실행속도가 더 빠른 것이다. 이를 함수 호출의 프로그램 내부 구조로 풀어보면 일반적인 함수는 작성한 코드 프로그램을 실행 -> 명령들을 컴퓨터 메모리에 로드 ->..