반응형 프로그래밍 언어170 [C++] RTTI (Run-Time Type Information) RTTI (Run-Time Type Information)• 실행시간에 객체 타입 조사 • 특정 조건에서는 컴파일 시간에도 조사 가능 타입 조사• typeid 연산자• dynamic_cast typeid객체 타입 정보를 std::type_info 타입의 객체 참조 반환const, volatile, refernece 제외한 타입에 결과 반환• t1 = t2• t1.hash_code() == t2.hash_code()• std::type_index(t1) == std::type_index(t2) #include #include int main(){ auto n = 10; const std::type_info& t1 = typeid(n); const std::type_info& t2 = t.. 2025. 2. 28. [C++] 가상함수와 디폴트 파라미터 가상함수와 디폴트 파라미터가상함수 override 시에는 디폴트 파라미터 값 설정 변경에 주의해야 한다. [예제] 가상함수와 디폴트 파라미터 #include class Base{public: virtual ~Base() {}; virtual void foo(int n = 10) { std::cout foo(); // ???} 가상함수 이기 때문에 파생 클래스(Dereived) 함수가 호출된다. 하지만 default parameter 는 기반 클래스(Base)로 결정되었다. 이는 디폴트 파라미터는 컴팡이러가 컴파일 시간에 값을 채우지만 가상함수는 실행시간에 결정하기 때문이다. 그렇기에 가상함수 override 시에는 디폴트 값을 변경하지 말아야 한다.📌 [C++] 가상 함수 (virtual f.. 2025. 2. 27. [C++] 추상 클래스 (abstract class) 추상 클래스 (abstract class)→ 순수 가상함수가 한 개 이상 있는 클래스 순수 가상 함수 (pure virtual function) → 구현이 없고, 「= 0」 으로 끝나는 가상함수 추상 클래스 특징 → 객체를 생성할 수 없다. → 포인터 변수는 만들 수 있다.class Shape{public: virtual void Draw() = 0; // 순수 가상함수 (pure virtual function) };int main(){ Shape s1; // error (추상 클래스는 객체를 만들 수 없다.) Shape s2*; // ok (객체 자체는 안되지만 포인터는 만들 수 있다.)} why? 추상 클래스파생클래스로 하여금 순수.. 2025. 2. 26. [C++] 가상 소멸자 가상 소멸자 C++에서는 가상 함수(virtual)가 하나라도 있는 클래스라면 소멸자도 virtual로 만드는 것이 안전한 습관이다. [예제] 부모-자식 객체 생성자/소멸자 순서 #include using namespace std;class Base{public: Base() { cout 부모 객체 생성 → 자식 객체 생성 자식 객체 소멸 → 부모 객체 소멸 [예제] 가상 소멸자 필요성#include using namespace std;class Base{public: Base() { cout ~Base 소멸자만 호출됨 (메모리 누수 발생 가능)}자식 객체 소멸자가 호출되지 않았다! 만약 기반 클래스의 소멸자가 virtual이 아니면 기반 클래스 포인터로 파생 클래스 객체를 삭제할 때 p .. 2025. 2. 24. [C++] 함수 바인딩 (Funciton Binding) 함수 바인딩 (Funciton Binding)표현식을 어느 함수와 연결할지 결정하는 과정 [예제] function binding#include class Animal{public: // static binding void Cry1() { std::cout Cry1(); // ??? -> 1 p->Cry2(); // ??? -> 4} ✔️ static binding (early binding)• 컴파일러가 컴파일 시간에 함수 호출 결정 • 컴파일러가 실제 어느 객체를 가리키는지 컴파일 시간에 알 수 없는 경우 타입을 가지고 함수 호출 결정 → 빠르지만 논리적이지 않다. → C++ non-virtual funciton ✔️ dynamic binding (late binding)• 컴파일.. 2025. 2. 22. [C++] mutable 키워드 [C++] mutable 키워드• const 멤버 함수에서도 특정 멤버 변수를 변경할 수 있도록 허용하는 키워드 • 주로 캐싱이나 디버깅 용도로 사용 [예시]가정: 특정 함수 호출 횟수(counter) 알고 싶다#include class Harbang{private:public: Harbang(){} void show() const { int counter = 0; counter++; std::cout Harbang 객체마다 고유의 counter 만들고 싶었지만 지역 변수를 사용하면 show() 호출할 때마다 초기화 이를 방지하기 위해 static 키워드 적용해보면 어떨까? [예시] static 키워드 적용 시도#include class Harban.. 2025. 2. 21. [C++] 상수 멤버함수 const member function 상수 멤버 함수 (const member function)• 컴파일러에게 상수 멤버 함수인 것을 알게 해주는 것• 멤버 함수의 괄호() 뒤쪽에 const 키워드 사용 함수 선언과 구현으로 분리하는 경우 양쪽에 모두 붙인다.• 상수 멤버 함수 안에서는 모든 멤버는 상수로 취급• 상수 객체는 상수 멤버함수만 호출 가능 [예제] const 멤버 함수 필요성#include class Point{public: int xpos, ypos; Point(int x, int y) : xpos{ x }, ypos{ y } {} void set(int x, int y) { xpos = x; ypos = y; } void print() { std::cout const 상수 객체(Point) 만들고 print() 호.. 2025. 2. 19. [C++] return by reference return by reference 필요성return by value 방식으로 반환 시 객체 복사본을 생성한다. 정확히는 "리턴용 임시객체(temporary)" 생성되어 반환 [예시] return by valuestruct Point{ int x; int y;};Point pt = { 1, 2 };Point f() // return by value{ return pt;}int main(){ f1().x = 10; // error (리턴용임시객체.x = 10)} 임시 객체는 함수 호출하는 문장 끝에서 파괴되고 rvalue 활용할 수 없다. 그렇기에 등호(=) 왼쪽으로 올 수 없다. [예시] return by referencestruct Point{ int x; int y;};Point pt = { .. 2025. 2. 15. [C++] class this 키워드 this• 멤버함수 내에서만 사용• 멤버함수 호출하는 개체 주소• 멤버 함수는 호출시 this가 같이 전달 - this call 방식• static 멤버 함수에서는 this 사용 불가• friend함수, 전역함수에서 this 사용 불가 [this 예제]#include class Point{ int x, y;public: void set(int a, int b) // void set(Point* this, int a, int b) { x = a; // this->x = a; y = b; // this->y = b; }};int main(){ Point p1, p2; .. 2025. 2. 8. [C++] static 변수 필요성 및 활용 static 변수 필요성 및 활용이번 포스팅에서는 클래스(객체) 관점에서static 키워드 필요성과 특징에 대해 알아보고자 한다. 아래 포스팅에 대한 추가 예시이기도 하다.📌 [C/C++] static 변수 [C/C++] static 변수static 변수- static 변수를 정적 변수라고 부릅니다.- 전역변수와 지역변수 모두에 static 선언을 추가할 수 있다. 하지만 static 변수는 『접근이 제한된 전역변수』를 만드는 것으로 지역변수 적zoosso.tistory.comstatic 변수 필요성#include int count = 0;class Car{ int speed;public: Car() { ++count; } ~Car() { --count; }};int main(){ Car c1; .. 2025. 2. 6. 이전 1 2 3 4 5 6 ··· 17 다음 반응형