728x90
반응형
728x90
반응형
decltype와 typeof의 차이와 활용법decltype과 typeof는 변수 또는 표현식의 타입을 추론하기 위해 사용되는 기능이다. 두 키워드는 모두 타입 추론이라는 공통점을 가지지만, 제공 방식과 활용 방법에서 큰 차이를 보인다. 아래에서 두 키워드의 개념과 사용법, 그리고 주요 차이점을 정리한다.decltype개념decltype은 C++11에서 도입된 키워드로, 변수나 표현식의 타입을 정확히 추론하여 사용할 수 있도록 한다. 이는 특히 템플릿 프로그래밍과 같은 고급 C++ 프로그래밍에서 매우 유용하게 활용된다.문법decltype(expression) variable_name;expression: 타입을 추론하고자 하는 변수 또는 표현식.variable_name: 추론된 타입으로 선언될 변수의 이..
함수 매개변수의 default 값 지정C++에서는 함수 매개변수에 default 값을 지정할 수 있다.#include int add(int n1 = 10, int n2 = 20, int n3 = 30){ return n1 + n2 + n3;}int main(){ std::cout 3번째 줄 add함수의 매개변수 n1, n2, n3에 default 값 10, 20, 30이 지정돼 있다. 이와 같이 함수의 매개변수에 default 값을 지정할 수 있다. add함수를 호출 할 때 별도의 값을 매개변수에 전달하지 않으면 add함수의 매개변수 n1, n2, n3는 지정된 default 값으로 초기화된다. 따라서 위 코드의 실행 결과는 아래와 같다.실행결과60매개변수의 default 값 지정은 오른쪽에서..
for_each()for_each란?algorithm 헤더에 정의된 STL함수로 주어진 범위 내의 모든 요소를 순회하면 요소 값을 함수에 전달하는 기능을 수행한다. std::for_each(시작 iterator, 끝 iterator, 함수 또는 람다 표현식)vector의 요소를 출력하는 예제#include #include #include void print(int value){ std::cout numbers = {1, 2, 3, 4, 5}; std::for_each(numbers.begin(), numbers.end(), print); return 0;}실행 결과는 다음과 같다.1, 2, 3, 4, 5[[vector]]로 선언된 numbers의 시작(begin())과 끝(end())의..
오버로딩(Overloading) 은 같은 이름의 함수를 여러개 정의할 수 있는 기능이다. 이는 함수의 이름은 같지만 매개변수의 타입이나 개수에 따라 다르게 정의될 수 있음을 의미한다. 함수 오버로딩을 사용하면 가독성을 높이고 함수의 이름을 직관적으로 사용할 수 있다.기본 개념함수 오버로딩은 함수의 이름을 동일하게 유지하면서도 서로 다른 매개변수 목록을 갖는 여러 버전의 함수를 정의할 수 있다. C++컴파일러는 함수 호출 시 제공된 인수에 기반하여 적절한 오버로딩 된 함수를 선택해 컴파일 한다.함수 오버로딩의 예#include // 매개변수가 없는 함수void print() { std::cout print라는 이름의 함수가 네 가지 버전으로 정의되어 있다. 각각의 함수는 다른 매개변수 목록을 가지고 ..
C++에서 함수 오버라이딩(Function Overriding)은 상속(Inheritance)에서 발생하는 개념으로, 부모 클래스(Base Class)에서 정의된 함수를 자식 클래스(Derived Class)에서 재정의하는 것을 의미합니다. 이로 인해 자식 클래스에서 부모 클래스의 함수를 재사용하거나 확장할 수 있습니다. 함수 오버라이딩은 다형성(Polymorphism)의 핵심 요소 중 하나로, 런타임 시점에 적절한 함수가 호출되도록 합니다.함수 오버라이딩의 조건함수 시그니처(Function Signature): 오버라이딩하는 함수는 부모 클래스의 함수와 동일한 함수 이름, 매개변수 리스트, 반환 타입을 가져야 합니다.접근 제어자(Access Specifier): 부모 클래스의 함수가 public이나 p..
디폴트 복사 생성자는 멤버 대 멤버를 그대로 복사한다. 이러한 방식의 복사를 얕은 복사(shallow copy)라고 하는데 이는 멤버변수가 힙(Heap)의 메모리 공간을 참조하는 경우에 문제가 발생한다.#include #include class Person{ char* name; int age;public: Person(char* myname, int myage) { int len = strlen(myname) + 1; name = new char[len]; strcpy(name, myname); age = myage; } void ShowPersonInfo() const { std::cout 위 코드에서..
생성자는 객체가 "생성" 될 때 자동으로 호출되는 함수다. 이와 반대로 객체가 "소멸"될 때 자동으로 호출되는 함수가 바로 소멸자다.#include #include class people { int height; int weight; char* name; public : people(int h, int w, const char* name_); ~people(); void show(void);};people::people(int h, int w, const char* name_){ std::cout위 코드를 실행한 결과는 아래와 같다. 생성자 호출height : 175weight : 73name : Jhon 소멸자 호출소멸자는 객체가 소멸되는..
new와 delete는 C++에서 새롭게 등장하는 키워드다. C언어에서 malloc과 free와 대응되는 키워드다. 아래 코드를 보자.int main(void){ int* ptr = new int; *ptr = 10; std::cout 3번째 줄에서 int형 포인터 변수 ptr에 int형만큼의 메모리를 할당하고 4번째 줄에서 ptr이 가리키는 메모리 영역에 10을 저장한다. 그리고 8번째 줄에서 ptr의 메모리를 해지하는 코드다. 아래 코드는 위 코드의 C언어 버전이다.int main(void){ int* ptr = (int*)malloc(sizeof(int)); *ptr = 10; printf("%d\n", *ptr); free(ptr); return 0;}n..
생성자(Constructor)생성자(constructor)란 객체를 생성하면 자동으로 호출되는 함수를 말한다. 아래 코드를 보자.#include class Date { int y; int m; int d; public : Date(int y_, int m_, int d_) { y = y_; m = m_; d = d_; }; int DateGetYear(void); int DateGetMonth(void); int DateGetDay(void);};int Date::DateGetYear(void){ return Date::y;}int Date::DateGe..
bool(boolean)은 C++에 존재하는 자료형이다.(최근에는 C 표준에도 기본 자료형으로 추가했지만 지원하지 않는 컴파일러가 많다.) bool 자료형은 boolean을 나타내는 자료형으로 ture, false 두 가지 값만 가질 수 있다. 이 자료형은 주로 조건문에서 사용된다. 보통 프로그래밍에서 어떤 조건이 1이면 true(참)를 의미하고 0이면 false(거짓)를 의미한다. 따라서 true와 false를 표현하기 위해서 상수로 정의하는 것이 일반적이지만 C++에서는 true와 false를 정의하고 있기 때문에 별도의 정의는 불필요하다. bool 자료형의 true, false가 사용되는 경우는 조건문, 논리연산, 함수 반환값, 변수에 사용될 수 있다. 조건문에서 사용되는 경우는 #include u..
네임스페이스(namespace)는 C++에서 식별자들을 그룹화하고 충돌을 방지하기 위한 방법으로 사용된다. 이게 무슨 말이냐면 예를 들어 A고등학교에 1학년 2반에 김민수라는 학생이 있고, 1학년 5반에 김민수라는 학생이 있어서 총 2명의 김민수가 있다면 김민수라는 학생을 부르기 위해서 이름을 부른다면 2명의 김민수가 모두 대답할 것이다. 1학년 2반의 김민수만을 부르고 싶다면 "1학년 2반 김민수"라고 부르면 1학년 2반의 김민수만 대답을 할 것이다. 이와 같은 개념이 네임스페이스다. 이 내용을 코드로 살펴보면. #include namespace one_two_class_minsoo { void minsoo(void); } namespace one_five_class_minsoo { void minso..
inline 함수inline 함수는 매크로 함수를 대체할 수 있다. #include #define SQUARE(x) ((x)*(x))// inline으로 정의inline int square(int x){ return x*x;}int main(){ // inline 함수를 호출 std::cout3번째 줄에서 정의한 #define SQUARE(x) ((x)*(x)) 매크로 함수와 6~9 번째 줄에 정의한 inline int square(int x)는 동일한 기능을 수행하는 함수다. 매크로 함수를 호출한 경우 전처리 과정을 거치면서 SQUARE(12) 가 ((12)*(12))로 대체된다. 이와 같이 함수의 몸체 부분이 함수 호출 문장을 완전히 대체 했을 때 함수가 인라인화 되었다. 라고 표..
C++에는 C 언어의 포인터(Pointer)와 유사한 개념의 참조자(Reference)라는 것이 있다. 참조자를 이야기 하기전에 우선 변수에 대한 개념을 다시 확인해보자. 변수란?할당된 메모리 영역에 붙여진 이름으로 변수를 통해 메모리 영역에 접근이 가능하다. 위 그림으로 예를 들어 설명하면, char형 변수 Value는 1Byte의 메모리 공간이 할당됬고, 할당된 메모리 영역의 주소는 0x1000 번지다. 즉 Value를 통해 0x1000 번지에 저장된 1byte의 데이터에 접근할 수 있다는 뜻이다. 참조자는 "변수의 별명" 이라고 할 수 있다. 코드를 통해 알아보자. #include using namespace std;int main(void){ int value = 10; int &value_..