C++

46

C++ 클래스

객체 지향 프로그래밍의 꽃, 클래스(Class) 객체 지향 프로그래밍(OOP,Object-Oriented Programming)에서 클래스는 OOP의 꽃같은 존재입니다.(C++ 말고도 OOP면 해당합니다.) OOP의 기능은 다음과 같습니다. 추상화(abstraction) 캡슐화(encapsulation)와 데이터 은닉(data hiding) 다형성(polymorphism) 상속(inheritance) 코드 재활용(reusability of code) 데이터형이란 무엇인가? 먼저 무엇이 데이터형을 구성하는지 잠시 생각해봅시다. 메모리에 저장되는 형태만으로 데이터형을 생각하기 쉽습니다. 예를들어 char는 1바이트, double은 8바이트 메모리를 나타냅니다. 그러나 좀 더 깊게 생각해보면, 데이터형이란 그..

프로그래밍/C++ 2019.10.14 Plorence

C++ 템플릿 함수 반환형 추론(decltype, auto)

타입이 무엇인가? 프로그래머가 템플릿 함수를 쓰려고 할 때 한 가지 문제점은, C++98에서 선언을 할 때에 어떤 타입을 사용해야 하는지 알아내는 방법이 항상 가능한 것은 아니라는 점입니다. template void Add(T1 a, T2 b) { ? result a + b; } 이때 result의 타입은 뭐가 되어야 하는지 알 수 없습니다. T1, T2의 타입들은 모든 타입이 올 수 있으므로 덧셈 연산으로 인해 뭐를 반환할지 알 수 없는 셈입니다. 예시 상황 #include class Integer { private: int n; public: Integer(int n = 0) { this->n = n; } Integer operator+(int n) { Integer result(this->n + n..

프로그래밍/C++ 2019.08.26 Plorence

C++ decltype 키워드(C++11)

decltype키워드 다음 내용은 C++11부터 적용된 내용이고 C++11부터 decltype이라는 키워드가 생겼습니다. decltype키워드는 주어진 이름이나 표현식의 구체적인 타입을 알려주는 키워드입니다. 사용 방법 int a = 0; decltype(a) b = a; //a와 동일한 타입의 변수 만들기 delctype(a+b) c = a+b; //a+b와 동일한 타입의 변수 만들기 컴파일러는 어떤 타입을 사용할 것인가 컴파일러는 어떤 타입을 사용할 것인지 결정하기 위해서 체크리스트를 거쳐야 합니다. decltype(expression) var; 1 만약 expression이 괄호가 없는 식별자일 경우라면 var는 식별자와 동일한 타입이 되며, const를 포함합니다. double x = 0; dou..

프로그래밍/C++ 2019.08.26 Plorence

C++ 함수 템플릿의 특수화와 구체화

특수화(specialization) 암시적 구체화, 명시적 구체화, 명시적 특수화를 모두 특수화라고 합니다. 이들의 공통점은 이들이 일반화 서술을 나타내는 함수 정의가 아니라, 모두 구체적인 데이터형을 사용하느 함수 정의를 나타낸다는 것이기 때문입니다. 함수 템플릿에서의 명시적 특수화(Explicit Specialization) 명시적 특수화(explicit specialization)라는 특수화된 함수 정의를, 필요한 코드와 함께 제공될 수 있습니다. 컴파일러가 함수 호출에 정확히 대응하는 특수화된 정의를 발견하게 되면 템플릿을 찾지 않고 그 정의를 사용합니다. 명시적 특수화를 사용하는 이유는 특정 형식(데이터형)에 대한 범위를 줄여 특별한 동작을 하기 위해서입니다. 만약 매개변수가 int형일경우 다른..

프로그래밍/C++ 2019.08.22 Plorence

C++ 함수 템플릿(Function Template)

함수 템플릿(Function Template) 최신 C++ 컴파일러들은 가장 최근에 추가된 기능인 함수 템플릿을 구현합니다. 함수 템플릿은 int형이나 double형과 같은 구체적인 데이터형을 포괄할 수 있는 일반형(generic type)으로 함수를 정의합니다. 어떤 데이터형을 템플릿에 매개변수로 전달하면, 컴파일러가 그 데이터형에 맞는 함수를 생성합니다. 함수 템플릿 : 함수를 만들기 위한 템플릿 (정의를 말함) 템플릿 함수 : 템플릿으로부터 만들어지는 함수 (생성된 함수를 말함) 해당 용어에 대해 좀 더 자세히 알고 싶다면(https://sks3297.tistory.com/entry/C-%ED%95%A8%EC%88%98%ED%85%9C%ED%94%8C%EB%A6%BF%EA%B3%BC-%ED%85%9..

프로그래밍/C++ 2019.08.22 Plorence

C++ 디폴트 매개변수(Default Parameter)

디폴트 매개변수(Default Parameter) 디폴트 매개변수는 C++에서 새로 추가된 내용입니다. 디폴트 매개변수는 함수 호출에서 실제 매개변수를 생략했을 경우에 실제 매개변수 대신 사용되는 값입니다. #include int func(int num1 = 1, int num2 = 2) { return num1 + num2; } int main(void) { int result = func(); int result1 = func(1, 2); } func()라는 함수는 매개변수 num1와 num2를 더해서 리턴하는 함수입니다. 첫 번째 함수 호출 후 리턴 값(변수 result의 값)은 3이고 두 번째 함수 호출 후 리턴 값도 동일하게 3입니다. 디폴트 매개변수는 말그대로 '디폴트'입니다. 함수호출을 하는..

프로그래밍/C++ 2019.08.17 Plorence

C++ 함수에 전달하는 값을 설명할 때 헷갈리는 점

문득 어제 게시글을 작성하다가, 이런 생각이 들었습니다. 그때 "첫 번째 인자로 100을 넘겨주고.."를 작성하다가 "parameter와 argument는 다른 건데 인자가 아닌 것 같은데?"라는 생각이 문득 들었습니다. 인자와 같이 따라다니는 놈이 있는데, 그게 바로 인수입니다. 인자 인자는 매개변수를 뜻합니다. C++ 기초 플러스에서는 아래와 같이 서술되어 있습니다. "전달되는 값을 넘겨받는 데 쓰이는 변수를 형식 매개변수(formal parameter)라고 한다." void function(int a,int b){ } a, b가 인자인겁니다. 인수 전달하는 값을 뜻하는데, C++ 기초 플러스에서는 아래와 같이 서술되어 있습니다. "함수에 전달되는 값을 실제 매개변수(actual argument)라 ..

프로그래밍/C++ 2019.08.16 Plorence

C++ 참조 변수

먼저 참조란? 참조(reference)는 미리 정의된 어떤 변수의 실제 이름 대신 쓸 수 있는 대용 이름입니다. A을 B변수의 참조로 만들면, A와 B는 같은 변수를 나타내는 것으로 사용할 수 있습니다. 참조의 주된 용도는 힘수의 매개변수에서 사용합니다. 참조를 매개변수로 사용하면 복사본이 아닌 원본 데이터를 가지고 작업을 합니다. 크기가 큰 구조체를 처리해야 하는 함수에서 포인터 대신에 참조를 사용할 수 있습니다. 참조 선언은 '&'기호로 합니다.(C, C++에서 변수의 주소를 나타내기 위해 &사용한다. C++에서는 하나의 의미를 더 추가한 것이다.) ※C에서는 참조 선언을 못한다. 참조 변수 선언 하기 int A = 10; int & B = A; //이때 B는 참조변수이다 간단한 사용법입니다. 이때 ..

프로그래밍/C++ 2019.08.15 Plorence

C++ 일반 함수와 인라인 함수의 차이(어셈블리로 확인하기)

전에 작성한 게시글(https://plorence.kr/482)에서 일부 내용을 가져왔습니다. 일반적인 함수는 아래와 같이 동작합니다. 함수 호출 명령 도달 함수 호출 명령 다음에 있는 명령 주소를 메모리에 저장 스택에 매개변수 복사후 함수가 시작되는 메모리 위치로 점프 코드 수행 리턴값을 레지스터에 복사 후 저장해뒀던 명령 주소로 돌아옴 인라인 함수와 일반 함수의 차이를 확인하기 위해 프로젝트 설정하기 VS2017 기준입니다. 프로젝트 속성 -> C++ -> 최적화로 들어가서 Ob1이나 Ob2를 선택하고 적용 -> 확인을 클릭합니다. 옵션은 MS docs에서 확인하실 수 있습니다. ( https://docs.microsoft.com/ko-kr/cpp/build/reference/ob-inline-fun..

프로그래밍/C++ 2019.08.13 Plorence

C,C++언어 break 와 continue문

break문 break문은 반복문의 탈출을 위해 사용합니다. 이때 break문을 실행하면 가장 가까이에 있는 반복문을 탈출합니다. 무한루프일때는 반드시 사용하거나 goto를 써서 강제로 이동시켜야 합니다. 12345678910111213#include int main(void){ int num1 = 0; while(1){ if(num1 > 1000){ break; // num1의 값이 1000이상이면 반복문을 탈출한다. } printf("%d \n",num1); num1++; } } while문은 무한루프상태이고 num++;을 써서 1씩올리는 코드이다. 적절하게 반복문을 탈출하기위해서 num1이 1000보다 크면 탈출하게되었다 이 예제를 실행해보면 마지막 숫자 1000을 출력하고나서 종료될것이다. con..

프로그래밍/C 2018.12.12 Plorence