본문 바로가기
반응형

분류 전체보기1342

[C++] 연산자 재정의 (Operator Overloading) 연산자 재정의 (Operator Overloading)사용자 정의 타입에서 +, - 등 연산자 사용할 수 있는 문법class Point{ int x = 0; int y = 0;public: Point() = default; Point(int x, int y) : x{ x }, y{ y } {}};int main(){ Point p1{ 1, 1 }; Point p2{ 2, 2 }; Point p3 = p1 + p2; // ?? -> error}「 a + b 」 → a, b 중 「operator+」 라는 함수 호출  찾을 수 없는 경우 Error→ 「 operator+(a, b) 」 or 「 a.operator+(b) 」  「 operator+(a, b) 」 함수 인자 2개로 멤버가 아닌 함수로 구현  「 .. 2025. 3. 5.
[C++] 다중 상속 (multiple inheritance) 다중 상속 (multiple inheritance)• 클래스 2개 이상의 기반 클래스 상속 하는 것• Java, C# 에서는 지원하지 않지만 C++에서는 다중 상속 지원 [예제] 다중상속class InputFile{public: void read() {}};class OutputFile{public: void write() {}};// 다중 상속class IOFile : public InputFile, public OutputFile{};int main(){ IOFile file; file.write(); file.read();}  주의사항• 서로 다른 기반 클래스에 동일 이름 멤버 있으면 충돌 주의 • Disamond 형태 상속class InputFile{public: .. 2025. 3. 4.
[C++] dynamic_cast dynamic_cast• 실행시간 캐스팅 (overhead 有)• 실제 가리키는 곳 조사해서 잘못되지 않는 경우 주소 반환 → 잘못된 경우 「0」 반환• porymorphic type 에 대해서만 사용 가능 → 가상함수 없는 경우 컴파일 에러 [예제]  downcastingclass Animal{public: virtual ~Animal() {}};class Dog : public Animal {};int main(){ Animal* p = new Dog; // error (암시적 형변환) Dog* pd1 = pa; // ok (명시적 형변환) Dog* pd2 = static_cast(pa);}downcasting• 기반 클래스 포인터 타입을 파생 클래스 포인터 타입으로 캐스팅 • 암시적 변환 될 수 .. 2025. 3. 3.
[C++] 인터페이스(Interface) 추상 클래스 vs 인터페이스• 인터페이스: 지켜야 하는 규칙(순수 가상함수)만 가진 것• 추상클래스: 지켜야 하는 규칙 + 다른 멤버도 있는 경우 Java 등 대부분의 객체 지향 언어는 abstract, interface 별도 키워드 제공하지만 C++ 에서는 추상 클래스 문법만 존재[예제]사람들은(People)은 일반 카메라를 사용#include class People{public: void UseCamera(Camera* p) { p->Take(); }};class Camera{public: void Take() { std::cout [예제] 카메라 종류가 다양해지면 기존 UseCamera(Camera* p) 로는 모든 카메라를 담을 수 없다.#include class People{publi.. 2025. 3. 2.
[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.
반응형