반응형 전체 글1347 [C++] object Slicing object Slicing Q) vector에 파생 클래스를 담으면 어떻게 될까?#include #include using namespace std;class Shape{ int num;public: virtual void draw() { cout v; Shape s; v.push_back(s); Rect d1; v.push_back(d1); Rect d2; v.push_back(d2); for (auto i : v) { i.draw(); // ??? }} 파생 클래스 Rect 담아주었지만 Shape draw()가 호출되었다. 이는 vector에서 Shape 타입만 보관하고 있다. Q) vector와 vector 무슨 차이가 있을까?#inc.. 2025. 3. 1. [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. 픽픽 PickPick 활용 방법 픽픽 PickPick 활용 방법 픽픽(Pick Pick)은 다양한 스크린샷 및 이미 편집 기능을 제공한다. 픽픽 설치아래 사이트 - [다운로드] - 최신 버전 [다운로드] 📍 https://picpick.net/ 픽픽(PicPick) - 올인원 그래픽 디자인 도구 (화면 캡처 및 녹화, 이미지 편집, 색상 추출, 눈금자,픽픽(PicPick) - 올인원 그래픽 디자인 도구 (화면 캡처 및 녹화, 이미지 편집, 색상 추출, 눈금자, 각도기, 십자선 등)picpick.net 픽픽 장점• 단축키 설정 • 여러 캡처 보관 (클립보드 기능) • 순서 스탬프 • 기본적이면서 간편한 편집 기능 주요 기능 ✔️ 순서 스탬프 ✔️ 마우스 하이라이트 표시 ✔️ 박스(box) 표시 • 하이라이트(highlight) 표.. 2025. 2. 25. [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++] 가상 함수 (virtual funciton) 가상 멤버 함수 (virtual function)동적 바인딩을 위해 사용class A{public: virtual void sub(void);}; [예제] 함수 재정의(overriding) 주의사항#include class Animal{public: void Cry() { std::cout Cry(); // ??? -> Dog? Animal?}Q) p->Cry(); 에서 Aniaml 객체, Dog 객체 중 어떤 Cry() 호출할까? A) Animal cry() 실제 객체는 Dog 이지만 upcasting 되어 Animal* p 만들어져 있다. java, python 등에서는 Dog cry가 호출되지만 C++에서는 기본적으로 Animal cry가 호출된다. (static binding) [예제.. 2025. 2. 23. [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++] Upcasting Upcasting• 기반 클래스 포인터로 파생 클래스 객체를 가리킬 수 있다.• 기반 클래스 포인터로는 기반 클래스 멤버만 접근 가능• 파생 클래스 접근하려면 static_cast 필요 [예제] upcasting 이란class Animal{public: int age;};class Cat : public Animal{public: int leg;};int main(){ Cat c; Cat* p1 = &c; // ok Animal* p2 = &c; // ok (upcasting) p2->age = 5; // ok} Animal* p2 는 기반 클래스 age 변수에만 접근 가능하다.그렇기에 파생 클래스의 leg 변수에 접근하면 error [예제] upcasting 주의.. 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. 이전 1 2 3 4 5 6 7 ··· 135 다음 반응형