virtual

    Virtual Memory - 가상 메모리 ( 필요한 이유 )

    간단하게 말해서 프로세스의 논리 메모리와 물리 메모리를 분리하기 위해 생긴 개념이다. 왜 분리를 해야 하냐면, 물리 메모리의 한계를 극복하기 위해서이다. 무슨 말이냐면 여러 프로그램을 돌리면 메모리 부족의 문제가 생긴다. 이는 메모리 침범의 문제로 이어지기 때문에 이를 해결하고자 한 방법이다. 이런 이유 때문에 가상 메모리와 물리 메모리를 분리한다는 의미다. 논리 메모리가 가상 메모리다. 왜 가상 주소가 필요한지 예를 들어보자, 3개의 프로그램을 일정 시간에 따라 반복적(time에 따라)으로 돌리고 메인 메모리의 크기는 64KB라고 가정해보자. 그러면 먼저 taks1 (32KB), task2(16KB), task3(48KB)의 정보는 Hard disk에 다 들어있을 것이다. 그러다가 task1이 실행되면..

    C++ 추상 클래스 / 순수 가상 함수 (Pure Virtual Function)

    순수 가상함수란 선언(declaration)만 있고 구현(definition)이 없는 가상 함수다. virtual void Func() = 0; 추상 클래스 위와 같은 순수 가상함수를 하나라도 가지고 있는 클래스를 추상클래스(abstract class)라고 한다. 추상 클래스는 객체를 생성할 수 없다. 추상 클래스는 멤버 함수의 원형만을 정의하고 그 구현은 자식 클래스에서 하게 된다. 추상 클래스를 상속받는 자식 클래스는 반드시 순수 가상함수를 오버라이딩 하여 재정의 해야만 한다. 그렇지 않다면 아래 그림과 같이 컴파일 오류가 난다. 이렇게 추상클래스를 활용하면 파생클래스에서 순수 가상함수를 재정의 하게끔 강제할 수 있다. #include using namespace std; class Parent { ..

    C++ virtual 다중 상속, 가상 부모 클래스

    다중 상속을 할 시 예상치 못하게 클래스가 중복될 가능성이 있다. class A { public: int a; }; class B : public A { public: int b; }; class C : public A { public: int c; }; class D : public B, public C { public: int d; }; A 클래스를 B, C 클래스가 상속받고 B, C 클래스를 D클래스가 상속받는 구조다. 문제는 이와같은 구조로 상속받을 때 A클래스의 내용물이 중복이 된다 하지만 중복되는 걸 희망하지 않을 때는 virtual 상속을 사용하면 된다. 클래스를 상속받을 때 상속받는 클래스에 virtual 을 앞에 붙여주면 된다 그렇게 되면, B, C 클래스를 상속받는 경우 B, C 클래스..

    C++ 가상함수 테이블 (Virtual Table)

    #include using namespace std; class A { public: virtual void Func1() { cout