프로그래밍/C++

    [C++] 가상 소멸자

    [C++] 가상 소멸자

    1. 가상 소멸자 #include using namespace std; class Base { public: Base() { cout

    [C++] 가상 함수 문법 정리

    [C++] 가상 함수 문법 정리

    1. 가상 함수 관련 문법 정리 class Shape { pbulic: virtual void Draw() {} }; class Rect : public Shape { public: virtual void Draw() {} // ok // void Draw() {} // ok }; int main() { } ① 파생 클래스에서 가상 함수 재정의 (override) 할 때 => virtual 키워드는 붙여도 되고 붙이지 않아도 된다. => 되도록이면 붙이는 것이 가독성이 좋다. class Base { public: virtual void f1() {} virtual void f2(int) {} virtual void f3() const {} }; class Derived : public Base { pub..

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

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

    1. 함수 오버 라이드 (function override) #include class Shape { public: void Draw() { std::cout C++, C# 등의 언어는 기반 클래스 함수 호출 => java, swift 등의 언어는 파생 클래스 함수 호출 2. 함수 바인딩 (binding) #include class Shape { public: void Draw() { std::cout 방법2. 실행 할 때 결정하는 방법 - dynamic binding 위의 코드를 봐선 p가 Shape를 가리키는걸 알 수 있다. 그럼 아래 코드를 보자. #include class Shape { public: void Draw() { std::cout 컴파일러는 컴파일 시간에 실제로 p가 어느 객체를 가리키..

    [C++] upcasting

    [C++] upcasting

    1. upcasting class Shape { public: int color; }; class Rect : public Shape { public: int x, y, w, h; }; int main() { Rect rect; Rect* p1 = ▭ // ok int* p2 = ▭ // error Shape* p3 = ▭ // ?? Shape& r = rect; // ?? } main함수를 살펴보자 1. Rect* p1 = ▭ - 서로 똑같은 타입으로 아무 문제 없이 ok. 2. int* p2 = ▭ - 이건 완벽히 다른 타입으로 error / 리인터프리터 캐스팅을 사용하면 가능 3. Shape* p3 = ▭ - 앞에 포인터가 Rect는 아니지만 기..

    [C++] 상속에서의 생성자 소멸자

    [C++] 상속에서의 생성자 소멸자

    1. 상속에서의 생성자 소멸자 #include using namespace std; class Base { int data; public: Base() { cout

    [C++] 상속과 접근 지정자 (access specifiers)

    [C++] 상속과 접근 지정자 (access specifiers)

    1. 상속과 접근 지정자 (access specifiers) class Base { private: int a; public: int c; }; class Derived : public Base { }; int main() { Derived derv; derv.a = 10; // error derv.c = 10; // ok } 위 코드는 Base를 기반 클래스로 Derived클래스가 상속받았다. 따라서 Derived클래스에는 적혀있진 않지만 a와 c 멤버데이터가 있다. main함수에서 a와 c에 접근하려 하는데 c는 public이라 상관없지만 a는 private으로 외부에서 접근할 수 없으므로 에러가 난다. 그렇다면 다음 코드는 어떨까? class Base { private: int a; public: ..