728x90

분류 전체보기 60

[C++] 가상 함수 (virtual function)

[C++] 가상 함수 (virtual function)가상 함수는 C++에서 다형성(polymorphism)을 구현하기 위한 핵심 개념입니다. 주로 상속 구조에서 기본 클래스 포인터(또는 참조)를 통해 파생 클래스의 함수를 호출할 수 있도록 도와줍니다.1. 가상 함수란? virtual 키워드를 사용하여 기본 클래스에 선언된 멤버 함수입니다. 파생 클래스에서 재정의(overriding)할 수 있으며, 이를 통해 런타임 다형성(runtime polymorphism)이 가능합니다.class Base {public: virtual void show(); // 가상 함수};2. 런타임 다형성의 동작 원리가상 함수는 동적 바인딩(dynamic binding)을 지원합니다. 즉, 컴파일 시점이 아닌 실행 시..

C++ 2025.04.23

[C++] static_cast 란?

[C++] static_cast 사용법 정리static_cast는 C++에서 제공하는 형 변환 연산자 중 하나로, 타입의 안전성을 일정 수준 보장하면서도 명시적인 형 변환을 가능하게 해줍니다. 주로 다음과 같은 상황에서 사용됩니다.1. 기본 타입 간의 변환int, float, double 같은 기본형 간의 변환에 사용됩니다.int a = 5;float b = static_cast<float>(a); static_cast는 명시적인 변환을 통해 컴파일러와 읽는 사람 모두에게 의도를 분명히 전달할 수 있습니다. 예를 들어 float → int 변환처럼 데이터 손실이 발생할 수 있는 경우에도 사용됩니다.2. 상속 관계에서의 포인터/참조 변환기본 클래스 포인터를 파생 클래스 포인터로 변환할 때 사..

C++ 2025.04.22

[C++] string_view와 C 스타일 문자열 비교

[C++] string_view와 C 스타일 문자열 비교C++에서는 문자열을 다루는 방식이 다양합니다. 그중에서 아래 두 코드처럼 "Hello"라는 문자열을 다르게 표현할 수 있습니다.char const msg[] = "Hello";std::string_view msg2 = "Hello"sv;두 표현 모두 "Hello"라는 같은 문자열 데이터를 가지고 있지만, 데이터 타입과 메모리 관리 방식에서 중요한 차이가 있습니다.1. msg — C 스타일 문자열char const msg[] = "Hello"; 타입: const char[6] (문자 배열) 내용: "Hello"는 5글자지만, 문자열 끝을 알리기 위해 \0(널 문자)이 포함되어 총 6바이트입니다. 메모리: 문자열 리터럴은 정적 메모리에 저장되고,..

C++ 2025.04.20

[C++] type-specifier-seq / 타입 지정자 시퀀스란?

[C++] type-specifier-seq란?type-specifier-seq는 C++와 같은 언어에서 변수나 함수의 타입을 정의하는 데 사용되는 일련의 타입 지정자(type specifiers)를 의미합니다. 이 구문은 변수나 함수의 자료형을 명시하고, 컴파일러에게 데이터의 종류와 동작을 설명해 주는 역할을 합니다.✅ 예시: int a = 10;에서의 type-specifier-seqint a = 10;위 코드에서 int는 type-specifier-seq의 일부입니다. 즉, 변수 a는 int 타입의 변수라는 의미입니다.🔍 type-specifier-seq란?type-specifier-seq는 하나 이상의 타입 지정자로 구성되며, 이 조합을 통해 변수 또는 함수의 타입을 정의할 수 있습니다.🧩 사..

C++ 2025.04.19

[C++]init-statementopt condition의 개념과 활용

init-statementopt condition는 프로그래밍 언어에서 반복문이나 제어 구조를 정의할 때 사용되는 구문 패턴을 말하며, 주로 C, C++, Java 같은 언어에서 for 반복문을 구성할 때 이 개념이 적용됩니다. for 반복문의 구문 구조for (init-statementopt; condition; expression) { // 반복할 코드}여기서 init-statementopt와 condition은 각각 다음을 의미합니다.1. init-statementopt (초기화 문)반복문이 시작될 때 한 번 실행되는 초기화 문입니다. opt(optional)라는 표기가 있듯이 선택적으로 생략할 수 있습니다.일반적으로 반복 카운터 변수를 선언하거나 초기화하는 데 사용됩니다.for (int i ..

C++ 2025.02.03

[C++] const static data member

constexpr는 C++11에서 도입된 키워드로, 컴파일 타임에 상수를 계산할 수 있도록 합니다. 이를 통해 런타임 비용을 줄이고, 코드의 안정성과 최적화를 향상시킬 수 있습니다. 주요 특징컴파일 타임 계산constexpr 함수와 변수는 가능한 경우 컴파일 타임에 계산됩니다.런타임에서 호출될 수도 있지만, 계산 가능 여부는 입력 값에 따라 결정됩니다.상수 표현식constexpr 변수는 반드시 상수 표현식으로 초기화되어야 합니다.컴파일 타임에 상수로 사용될 수 있습니다.constexpr int a = 10; // 컴파일 타임 상수constexpr int b = a + 5; // 컴파일 타임에 15로 계산 함수의 제한 사항C++11: 함수 본문은 단일 return 문으로만 작성 가능.C++14: 조건문(i..

C++ 2024.11.27

[C++] front 함수

front 함수는 C++ STL(Standard Template Library)의 여러 컨테이너에서 제공하는 멤버 함수로, 컨테이너의 첫 번째 요소에 대한 참조를 반환합니다. 이를 사용하여 첫 번째 요소를 읽거나 수정할 수 있습니다. 사용 가능 컨테이너front 함수는 다음과 같은 STL 컨테이너에서 사용할 수 있습니다:시퀀스 컨테이너: std::vector, std::deque, std::list컨테이너 어댑터: std::queue (첫 번째 요소를 반환)사용 예시#include #include int main() { std::vector vec = {10, 20, 30}; // 첫 번째 요소 출력 std::cout 출력 결과첫 번째 요소: 10 수정된 첫 번째 요소: 100특징반환 ..

C++ 2024.11.26

[C++] 클래스 템플릿의 부분 특수화(partial specialization)와 명시적 특수화(explict specialization)

C++ 템플릿의 부분 특수화와 명시적 특수화는 템플릿을 특정 타입이나 조건에 맞게 커스터마이징하는 강력한 기능입니다. 이를 통해 일반적인 템플릿을 특정 조건에 따라 다르게 동작하도록 설계할 수 있습니다. 1. 명시적 특수화 (Explicit Specialization)명시적 특수화는 템플릿을 특정 타입에 대해 완전히 재정의하는 것입니다. 이는 특정 타입에 대해 일반 템플릿이 아닌 별도의 동작을 수행하도록 만듭니다.기본 구조template class MyClass { // 일반 템플릿 정의};// 특정 타입에 대한 명시적 특수화template class MyClass { // 특정 타입에 대한 특수화된 정의};예제: 명시적 특수화#include // 일반 템플릿template struct MyS..

C++ 2024.11.25

[C++] using키워드

C++에서 using은 **타입 별칭(type alias)**을 정의하거나 네임스페이스 내 이름을 더 간편하게 사용할 수 있도록 도와주는 키워드입니다. C++11부터 도입된 이 키워드는 코드의 가독성을 높이고 작성 시간을 단축시키는 데 매우 유용합니다. 1. 타입 별칭 정의using을 사용하면 기존 타입에 새로운 이름을 정의할 수 있습니다. 이는 기존의 typedef와 동일한 기능을 제공하지만, 문법적으로 더 직관적입니다.기본 문법using 새이름 = 기존타입;예제: 타입 별칭#include using Integer = int; // int를 Integer로 정의using IntVector = std::vector; // std::vector를 IntVector로 정의int ma..

C++ 2024.11.24

[C언어] void 포인터

C 언어에서 void 포인터는 데이터 타입이 정해지지 않은 포인터를 의미합니다. 이 포인터는 유연성과 확장성이 뛰어나지만, 잘못 사용하면 오류가 발생할 수 있어 주의가 필요합니다.1. void 포인터란?void 포인터는 **"타입이 없는 포인터"**입니다. 즉, 어떤 데이터 타입의 주소든 저장할 수 있는 일반 포인터입니다.그러나 역참조(dereference) 할 때는 적절한 타입으로 변환해야 합니다.예제#include int main() { int a = 10; float b = 5.5; void *ptr; // 어떤 데이터 타입이든 void 포인터에 저장 가능 ptr = &a; printf("Integer value: %d\n", *(int *)ptr); ptr..

C언어 2024.11.23
728x90