본문 바로가기

전체 글

(71)
[C++] 5-2 가상 함수(Virtual function) 가상 함수 부모 클래스 내에 정의되어 있는 멤버 함수를 가상 함수(virtual function)로 만들면 자식 클래스에서 재정의하여 사용할 수 있다. 부모 클래스의 멤버 함수를 가상 함수로 만들기 위해서는 예약어 virtual를 입력하면 된다. 부모 클래스의 가상 함수를 상속받은 자식 클래스에서는 그 가상 함수를 재정의하여 사용할 수 있다. 이때 예약어 virtual은 생략한다. 가상 함수의 재정의는 함수 오버로드(overloading)와 비슷해 보이지만 전혀 다른 개념이다. 함수의 오버로드는 매개변수의 개수와 데이터 형태가 달라야 한다. 하지만 가상 함수의 재정의해서는 매개변수의 개수와 데이터 형태 그리고 return값의 데이터 형태가 동일해야 하며, 가상 함수는 클래스의 멤버이어야 한다. 이처럼 가..
[C++] 5-1 기본 클래스 포인터 (Base class pointer) 기본 클래스 포인터 기본 클래스 포인터는 부모 클래스로부터 파생된 어떤 객체들도 가리킬 수 있다. 하지만 기본 클래스 포인터를 통해서 접근할 수 있는 파생 객체의 멤버는 부모 클래스에서 상속받은 멤버들로 제한된다. 자세한 내용은 아래 예제에서 참고할 수 있다. 이러한 문제를 해결하기 위해서 가상 함수(virtual function)가 사용된다. 가상 함수에 대한 자세한 내용은 다음 포스팅에 기재하고자 한다. 예제 #include using namespace std; class parent {//부모 클래스 정의 private: char* name; public: void set_1(char* n) { name = n; } void output_1() { cout
[C++] 4-5 가상 기본 클래스 (Virtual base class) 가상 기본 클래스 Child 클래스가 여러 개의 Parent 클래스를 직접 상속받는 경우 모호한 문제가 발생할 수 있다. 예를 들어 클래스 C1과 C2가 P1에게 직접 상속을 받고, 클래스 C3가 C1과 C2를 직접 상속받는 경우가 그러하다. 그러면 C3가 P1을 두 번 상속받게 된다. 한 번은 C2을 통해서 상속되고, 또 한 번은 클래스 C2를 통해서 상속된다. 이것은 클래스 C3 객체가 생성될 때 클래스 P1의 복사본이 두 개 존재하게 되는 것을 의미한다. C++에서는 어떤 Child 클래스가 동일한 Parent 클래스를 간접적으로 두 번 이상 상속받을 때 오직 한 번만 상속받도록 가상 기본 클래스 (virtual base class) 기능을 제공한다. 가상 클래스 기능을 사용하려면 parent 클래..